【问题标题】:How to add datepicker onclick of a TextViiew. Have multiple date fields in the form如何在 TextView 的单击上添加日期选择器。表单中有多个日期字段
【发布时间】:2016-05-30 02:27:48
【问题描述】:

我对 Android 编程完全陌生,抱歉,如果我问了一个愚蠢的问题。如何在 TextView 的单击上添加日期选择器,然后在选择日期时它应该更新相应的 TextView。我正在制作的表格中有多个日期字段。并且在其他片段中也有许多日期字段。我已经看到了很多答案,但不知道如何应用它。我的意思是哪个代码去哪里。请按步骤向我解释。

更新: 我现在可以膨胀不同 TextView 的 datepicker onclick,但只有一个 TextView 在选择日期时更新,而不是在相应的 TextView 上更新。


XML:

 <TextView
        android:id="@+id/DateOfEventForm"
        android:textSize="15dp"
        android:background="@drawable/roundwhite"
        android:layout_width="match_parent"
        android:layout_height="38dp"
        android:layout_gravity="center_horizontal"
        android:textColor="@android:color/black" />
 <TextView
        android:id="@+id/TimeDateOccurence"
        android:layout_width="match_parent"
        android:textSize="15dp"
        android:background="@drawable/roundwhite"
        android:layout_height="38dp"
        android:layout_gravity="center_horizontal"
        android:textColor="@android:color/black" />

这就是活动片段现在的样子

public class FragmentReportAFault extends Fragment {
private View mRootView;
private Button mNextButton, mSaveButton, mDeleteButton;
private LinearLayout mFirstLayoutForm, mSecondLayoutForm;
private TextView mSelectorOne, mSelectorTwo;
private TextView DateOfEventForm,TimeDateOccurence;
int clicked;



@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    mRootView = inflater.inflate(R.layout.fragment_reportafault, container, false);
    uiInitialize();
    setListners();
    return mRootView;
}


private void uiInitialize() {
    mFirstLayoutForm = (LinearLayout) mRootView.findViewById(R.id.FirstLayoutForm);
    mSecondLayoutForm = (LinearLayout) mRootView.findViewById(R.id.SecondLayoutForm);
    mNextButton = (Button) mRootView.findViewById(R.id.btnNext);
    mSaveButton = (Button) mRootView.findViewById(R.id.btnSave);
    mDeleteButton = (Button) mRootView.findViewById(R.id.btnDelete);
    mSelectorOne = (TextView) mRootView.findViewById(R.id.selector1);
    mSelectorTwo = (TextView) mRootView.findViewById(R.id.selector2);
    DateOfEventForm= (TextView)mRootView.findViewById(R.id.DateOfEventForm);
    TimeDateOccurence= (TextView)mRootView.findViewById(R.id.TimeDateOccurence);
}
private DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() {
    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        if (clicked == 0) {
            DateOfEventForm.setText(year + " -" + (monthOfYear + 1) + "-" + dayOfMonth);
        }
        else if (clicked == 1){
            DateOfEventForm.setText(year + " -" + (monthOfYear + 1) + "-" + dayOfMonth);

        }
    }
};

private void setListners() {
    mNextButton.setOnClickListener(onClick);
    mSaveButton.setOnClickListener(onClick);
    mDeleteButton.setOnClickListener(onClick);
    mFirstLayoutForm.setVisibility(View.VISIBLE);
    mSecondLayoutForm.setVisibility(View.GONE);
    mSelectorOne.setBackgroundResource(R.drawable.rounded_corner);
    mSelectorTwo.setBackgroundResource(R.drawable.rounded_corner_white);
    DateOfEventForm.setOnClickListener(onClick);
    TimeDateOccurence.setOnClickListener(onClick);
}

View.OnClickListener onClick = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        switch(v.getId()){
            case R.id.btnNext:{
                mFirstLayoutForm.setVisibility(View.GONE);
                mSecondLayoutForm.setVisibility(View.VISIBLE);
                mSelectorOne.setBackgroundResource(R.drawable.rounded_corner);
                mSelectorTwo.setBackgroundResource(R.drawable.rounded_corner);
                mSelectorTwo.setTextColor(Color.WHITE);

            }break;
            case R.id.btnSave:{

            }break;
            case R.id.btnDelete:{

            }
            break;
            case R.id.DateOfEventForm:{

                Calendar calendar = Calendar.getInstance();
                int year = calendar.get(Calendar.YEAR);
                int month = calendar.get(Calendar.MONTH);
                int day = calendar.get(Calendar.DAY_OF_MONTH);
                clicked =0;

                DatePickerDialog dateDialog = new DatePickerDialog(getActivity(), dateSetListener, year, month, day);
                dateDialog.show();
            }
            break;
            case R.id.TimeDateOccurence:{

                Calendar calendar = Calendar.getInstance();
                int year = calendar.get(Calendar.YEAR);
                int month = calendar.get(Calendar.MONTH);
                int day = calendar.get(Calendar.DAY_OF_MONTH);
                clicked =1;

                DatePickerDialog dateDialog = new DatePickerDialog(getActivity(), dateSetListener, year, month, day);
                dateDialog.show();
            }
            break;

        }
    }
};}

【问题讨论】:

    标签: android android-layout android-fragments datepicker


    【解决方案1】:

    对您的代码进行了更改。我没有测试它。试试这个

        private View mRootView;
        private Button mNextButton, mSaveButton, mDeleteButton;
        private LinearLayout mFirstLayoutForm, mSecondLayoutForm;
        private TextView mSelectorOne, mSelectorTwo;
        int clicked;
    
        //added
        private TextView DateOfEventForm;
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            mRootView = inflater.inflate(R.layout.fragment_reportafault, container, false);
            uiInitialize();
            setListners();
            return mRootView;
        }
    
    
        private void uiInitialize() {
            mFirstLayoutForm = (LinearLayout) mRootView.findViewById(R.id.FirstLayoutForm);
            mSecondLayoutForm = (LinearLayout) mRootView.findViewById(R.id.SecondLayoutForm);
            mNextButton = (Button) mRootView.findViewById(R.id.btnNext);
            mSaveButton = (Button) mRootView.findViewById(R.id.btnSave);
            mDeleteButton = (Button) mRootView.findViewById(R.id.btnDelete);
            mSelectorOne = (TextView) mRootView.findViewById(R.id.selector1);
            mSelectorTwo = (TextView) mRootView.findViewById(R.id.selector2);
            DateOfEventForm= (TextView)mRootView.findViewById(R.id.DateOfEventForm);
    
        }
    
        private DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                if(clicked==0) {
                  DateOfEventForm.setText(year +" -"+(monthOfYear+1)+ "-"+dayOfMonth);
                }        
       }
        };
    
        private void setListners() {
            mNextButton.setOnClickListener(onClick);
            mSaveButton.setOnClickListener(onClick);
            mDeleteButton.setOnClickListener(onClick);
            DateOfEventForm.setOnClickListener(onClick);
            mFirstLayoutForm.setVisibility(View.VISIBLE);
            mSecondLayoutForm.setVisibility(View.GONE);
            mSelectorOne.setBackgroundResource(R.drawable.rounded_corner);
            mSelectorTwo.setBackgroundResource(R.drawable.rounded_corner_white);
        }
    
        View.OnClickListener onClick = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                switch(v.getId()){
                    case R.id.btnNext:{
                        mFirstLayoutForm.setVisibility(View.GONE);
                        mSecondLayoutForm.setVisibility(View.VISIBLE);
                        mSelectorOne.setBackgroundResource(R.drawable.rounded_corner);
                        mSelectorTwo.setBackgroundResource(R.drawable.rounded_corner);
                        mSelectorTwo.setTextColor(Color.WHITE);
    
                    }break;
                    case R.id.btnSave:{
    
                    }break;
                    case R.id.btnDelete:{
    
                    }
                    break;
                   case R.id.DateOfEventForm:{
    
                          Calendar calendar = Calendar.getInstance();
            int year = calendar.get(Calendar.YEAR);
            int month = calendar.get(Calendar.MONTH);
            int day = calendar.get(Calendar.DAY_OF_MONTH);
    
             clicked =0;
            DatePickerDialog dateDialog = new DatePickerDialog(getActivity(),      dateSetListener, year, month, day);
            dateDialog.show();
                    }
                    break;
    
                }
            }
        }; }
    

    【讨论】:

    • 这里显示错误: DatePickerDialog dateDialog = new DatePickerDialog(this, dateSetListener, year, month, day);在 dateSetListner 下
    • edited 用 getActivity() 替换它,因为它是一个片段
    • 成功了!!!太感谢了 :) 。因此,对于具有日期字段的不同片段活动,我应该实现相同的方法.. 对吗?另外告诉我如何从时间选择器中选择时间,因为我在活动中有一个时间字段。
    • 我在同一个活动片段中尝试了不同的日期字段。它显示了日期选择器,在选择日期时它更新了前一个 TextView 而不是第二个日期字段。
    • 设置文本为TextView时,必须在onDateSet方法中区分。使用全局变量并在 onDataSet 中写入 if else
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多