android - 在 fragment 中添加日期选择器

标签 android android-fragments datepicker

如何在 fragment 中添加日期选择器?

我在 SO 上找到了一些答案,展示了如何使用 DialogFragment 来拥有 DatePicker。但是当我将 getSupportFragmentManager() 添加到我的 fragmnet 时,它会出错。

请帮帮我...

public class Fragment_addStudentDetails extends Fragment implements View.OnClickListener {

EditText fName,mName, Address, sName, hNo, mNo, presentSpo;
Button save;
DatabaseAdapter databaseHelper;
private ImageButton ib;


@Override
public View onCreateView(LayoutInflater inflater,
                         ViewGroup container, Bundle savedInstanceState) {
    View view=inflater.inflate(R.layout.fragment_add_student_details,container,false);
    fName = (EditText) view.findViewById(R.id.enterFname);
    mName = (EditText) view.findViewById(R.id.enterMname);
    sName = (EditText) view.findViewById(R.id.enterSureName);
    Address =(EditText) view.findViewById(R.id.enterAddress);
    hNo = (EditText) view.findViewById(R.id.entertph);
    mNo = (EditText) view.findViewById(R.id.entertpm);
    presentSpo = (EditText) view.findViewById(R.id.enterpres_sport);

    save = (Button) view.findViewById(R.id.btnsavefrag);

    save.setOnClickListener(this);

    databaseHelper = new DatabaseAdapter(getActivity());

    return view;
}

@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.btnsavefrag:
        addStudent(v);
        break;
        case 1:

        break;
}
}
public void showDatePickerDialog(View v) {
    new DatePickerFragment((EditText) v).show(getSupportFragmentManager(), "datePicker");
}

public void addStudent(View view){
    String fname = fName.getText().toString();
    String mname = mName.getText().toString();
    String sname = sName.getText().toString();
    String address = Address.getText().toString();
    String TPhome = hNo.getText().toString();
    String TPmobile = mNo.getText().toString();
    String presentsport = presentSpo.getText().toString();

    long id= databaseHelper.insertData(fname, mname, sname, address, TPhome, TPmobile, presentsport);
    if(id<0){
        Message.message(getActivity(),"Error inInsertiong Data");
    }else
    {
        Message.message(getActivity(),"Succecsfuly inserted to data");

    }
}

public void viewDetails(View view){
    String data = databaseHelper.getAllData();
    Message.message(getActivity(),data);
}
}

我的日期选择器 Fragmnet 类

public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {

public EditText activity_edittext;

public DatePickerFragment(EditText edit_text) {
    activity_edittext = edit_text;
}

@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);
}

@Override
public void onDateSet(DatePicker view, int year, int month, int day) {
    activity_edittext.setText(String.valueOf(month + 1 ) + "/" + String.valueOf(day) + "/" + String.valueOf(year));
}
}

Activity 类

 public class Group_Add_Details_menu extends Activity{

Fragment fragment;
Button btnFragment1, btnFragment2, btnFragment3, btnFragment4;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.add_detal_menu);
    btnFragment1 = (Button)findViewById(R.id.btn1);
    btnFragment2 = (Button)findViewById(R.id.btn2);
    btnFragment3 = (Button)findViewById(R.id.btn3);
    btnFragment4 = (Button)findViewById(R.id.btn4);

    btnFragment1.setBackgroundResource(R.drawable.add_sbutton_pressed);
    btnFragment2.setBackgroundResource(R.drawable.add_tbutton_pressed);
    btnFragment3.setBackgroundResource(R.drawable.add_pbutton_pressed);
    btnFragment4.setBackgroundResource(R.drawable.view_button_pressed);

    // get an instance of FragmentTransaction from your Activity
    FragmentManager fragmentManager = getFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

    //add a fragment
    Fragment_addStudentDetails myFragment = new Fragment_addStudentDetails();
    fragmentTransaction.add(R.id.myfragment, myFragment);
    fragmentTransaction.commit();

    btnFragment1.setOnClickListener(btnFragmentOnClickListener);
    btnFragment2.setOnClickListener(btnFragmentOnClickListener);
    btnFragment3.setOnClickListener(btnFragmentOnClickListener);
    btnFragment4.setOnClickListener(btnFragmentOnClickListener);
}

Button.OnClickListener btnFragmentOnClickListener = new Button.OnClickListener(){

    @Override
    public void onClick(View v) {

        Fragment newFragment;

        // Create new fragment
        if(v == btnFragment1){
            newFragment = new Fragment_addStudentDetails();

        }else{
            newFragment = new Group_Add_test();
        }

        // Create new transaction
        FragmentTransaction transaction = getFragmentManager().beginTransaction();

        // Replace whatever is in the fragment_container view with this fragment,
        // and add the transaction to the back stack
        transaction.replace(R.id.myfragment, newFragment);
        transaction.addToBackStack(null);

        // Commit the transaction
        transaction.commit();
    }};

    }

最佳答案

cannot resolve method 'getSupportFragmentManager()' 

这意味着您正在使用不同类型的 fragment ,它是 android 的默认 fragment ,而不是支持库支持 fragment >.

解决方法:

确保您的导入看起来像这样:

import android.support.v4.app.Fragment;

编辑:

由于您使用的是 Activity 这是默认的 android Activity 而不是支持您需要使用 getFragmentManager() 而不是 getSupportFragmentManager()

关于android - 在 fragment 中添加日期选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25578510/

相关文章:

java - 谷歌地图不返回经度和纬度

javascript - Angular 日期选择器

jQuery Datepicker 与之前提交的输入字段重叠

java - Android:使用设备名称而不是IP地址进行休息调用

android - 为什么 Font Awesome 不为使用 Xamarin Forms 的 iOS 应用程序显示?

android - 有没有办法将 Runnable (或 Callable)传递给 IntentService ?

android - 在 View Pager 的一个 fragment 中显示菜单

Android WorkManager - CoroutineWorker : Overriding coroutineContext is deprecated

java - 无法从适配器检索数据并将其显示为 fragment

javascript - Vue 日期选择器并提交所选日期