【问题标题】:Android DatePicker and Button issuesAndroid DatePicker 和 Button 问题
【发布时间】:2014-08-14 16:32:41
【问题描述】:

当用户单击显示“设置您的生日”的按钮时,我正在尝试显示 DatePicker 对话框,然后我需要按钮在按钮中显示用户的选择。我已经使用 TextView 尝试了本网站上列出的一些解决方案,但都无济于事。 DatePicker 显示得很好,但我无法让数据显示在 Button 上。我试过这些解决方案:DatePicker not updating Textview in AndroidDisplay datepickers value in a textviewAndroid: DatePicker and DatePicker DialogHow to transfer the formatted date string from my DatePickerFragment?

这是我的代码:

首先是 DatePickerFragment:

公共类 DatePickerFragment 扩展 DialogFragment 实现 DatePickerDialog.OnDateSetListener {

TheListener listener;

public interface TheListener {
    public void returnDate(String date);
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    final Calendar c = Calendar.getInstance();
    int year = c.get(Calendar.YEAR);
    int month = c.get(Calendar.MONTH);
    int day = c.get(Calendar.DAY_OF_MONTH);

    return new DatePickerDialog(getActivity(), this, year, month, day);
}

@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
    Calendar c = Calendar.getInstance();
    c.set(year, monthOfYear, dayOfMonth);

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    String formattedDate = sdf.format(c.getTime());

    if (listener != null) {
        listener.returnDate(formattedDate);
    }
}

}

现在,调用它的 Fragment:

公共类 SignUpFragment 扩展 Fragment 实现 MyBirthday.TheListener {

private Button btnBirthday;

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

    View view = inflater.inflate(R.layout.fragment_signup, container, false);

    return view;
}

@Override
public void onResume() {
    super.onResume();

    btnBirthday = (Button) getActivity().findViewById(R.id.signup_birthday_button);
    btnBirthday.setText("Set your birthday");
    btnBirthday.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            DialogFragment picker = new DatePickerFragment();
            picker.show(getFragmentManager(), "datePicker");
        }
    });
}

@Override
public void returnDate(String date) {
    btnBirthday.setText(date);
}

}

我们将不胜感激任何和所有的帮助。如果这是一个重复的问题,我很抱歉,但我找不到让我的程序按照我想要的方式运行的方法。我在这里找不到解决方案。

提前致谢。

【问题讨论】:

    标签: android button android-fragments datepicker


    【解决方案1】:

    试试这个。这将向您展示如何在文本视图中呈现信息,但您也可以将其传输到按钮。你可以在http://www.ahotbrew.com/android-datepicker-example/找到完整的源代码

    package com.ahotbrew.datepicker; 
    import android.app.DatePickerDialog;
    import android.app.Dialog;
    import android.support.v4.app.DialogFragment;
    import android.support.v7.app.ActionBarActivity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.DatePicker;
    import android.widget.TextView; 
    import java.util.Calendar;
    
    public class MainActivity extends ActionBarActivity {
    
        public static TextView SelectedDateView;
    
        public static class DatePickerFragment extends DialogFragment
                implements DatePickerDialog.OnDateSetListener {
    
            @Override
            public Dialog onCreateDialog(Bundle savedInstanceState) {
                // Use the current date as the default date in the picker
                final Calendar c = Calendar.getInstance();
                int year = c.get(Calendar.YEAR);
                int month = c.get(Calendar.MONTH);
                int day = c.get(Calendar.DAY_OF_MONTH);
    
                // Create a new instance of DatePickerDialog and return it
                return new DatePickerDialog(getActivity(), this, year, month, day);
            }
    
            public void onDateSet(DatePicker view, int year, int month, int day) {
                SelectedDateView.setText("Selected Date: " + (month + 1) + "-" + day + "-" + year);
            }
        }
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            SelectedDateView = (TextView) findViewById(R.id.selected_date);
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.menu_main, menu);
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
    
            //noinspection SimplifiableIfStatement
            if (id == R.id.action_settings) {
                return true;
            }
    
            return super.onOptionsItemSelected(item);
        }
    
        public void showDatePickerDialog(View v) {
            DialogFragment newFragment = new DatePickerFragment();
            newFragment.show(getSupportFragmentManager(), "datePicker");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-10
      • 1970-01-01
      • 2015-07-14
      • 2015-01-07
      • 2011-03-31
      相关资源
      最近更新 更多