Android的,通过DialogFragment达到按钮?(Android, reach Butt

2019-10-19 04:04发布

我想要什么:按钮文本是“08:00”现在。 当点击按钮,它显示了一个timepicker。 所选择的时间设置为按钮文本。 (报警应用程序)。 我看过一些这方面的教程和问题,答案,但还没有找到解答。 之后,我按下时钟按钮的应用程序崩溃。 如果我把onCreateView参与评论它的工作原理。 它说:android.util.AndroidRuntimeException:requestFeature()必须在添加内容之前被调用。

public class TimeSet extends DialogFragment implements TimePickerDialog.OnTimeSetListener {

    private Button clock;

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current time as the default values for the picker
        final Calendar c = Calendar.getInstance();
        int hour = c.get(Calendar.HOUR_OF_DAY);
        int minute = c.get(Calendar.MINUTE);

        // Create a new instance of TimePickerDialog and return it
        return new TimePickerDialog(getActivity(), this, hour, minute,
                DateFormat.is24HourFormat(getActivity()));
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

        // R.layout.my_layout - that's the layout where your textview is placed
        View view = inflater.inflate(R.layout.listview_item_row, container, false);
        clock = (Button)view.findViewById(R.id.ora);
        // you can use your textview.
        return view;
    }

    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        // Do something with the time chosen by the user
        clock.setText(new StringBuilder().append(hourOfDay).append(":").append(minute));
    }

}

Answer 1:

从评论

When clicks the button it shows a timepicker. The user select the time and the time chosen is showed as the buttons text (alarm app). 

有没有必要夸大的布局。

http://developer.android.com/guide/topics/ui/controls/pickers.html

使用一个接口作为回调到活动中。

在按钮点击显示DialogFragment 。 使用界面。 实现了相同的活动,并设置时间按钮

public class TimePickerFragment extends DialogFragment
implements TimePickerDialog.OnTimeSetListener {
    public interface PickTime
    {
        public void returnTime(String value);

    }

    PickTime mCallback;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current time as the default values for the picker
    mCallback = (PickTime) getActivity();
final Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);

// Create a new instance of TimePickerDialog and return it
return new TimePickerDialog(getActivity(), this, hour, minute,
DateFormat.is24HourFormat(getActivity()));
}

public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
// Do something with the time chosen by the user

    if(mCallback!=null)
    {
        StringBuilder sb = new StringBuilder();
        sb.append(hourOfDay);
        sb.append(":");
        sb.append(minute);
        mCallback.returnTime(sb.toString());
    }
}
}

在您的活动

public class MainActivity extends ActionBarActivity implements PickTime{

    Button button;
    TimePickerFragment newFragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button) findViewById(R.id.button1)
        button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                  newFragment = new TimePickerFragment();
                  newFragment.show(getSupportFragmentManager(), "timePicker");

               }
            });
    }
    @Override
    public void returnTime(String value) {
        // TODO Auto-generated method stub
        button.setText(value);

    }

}


文章来源: Android, reach Button via DialogFragment?