1

私はAndroidを初めて使用しますが、Androidに適用されるコンテキストが何であるかを完全には理解していないことを認めます。少しはわかりますが、完全ではありません。DatePickerDialogに日と月のみが含まれるように、AndroidDatepickerを変更しようとしています。私はstackoverflowに質問し、3つのコードブロックの形で1つの答えが与えられました。コードは以下のとおりです。私の問題は、、、...で1つのエラーが発生することです mDialog = new CustomDPDialog(getContext()thisエラーは。で発生しgetContext()ます。それは、に対してgetContext()未定義であると言いonClickListenerます。それで、以下のコードを見て、修正は何でしょうgetContext()か?メソッドを作成すると、getContext()実際にはコードがさらに悪くなります。そして、コンテキストを使用して、エラーの代わりにnullを使用するとgetContext(), this,、エラーが消去されますが、nullであってはならず、。である必要がありますthis

static final int ID_DATEPICKER = 0;
private int myYear, myMonth, myDay;
TextView dateDisplay;
Dialog mDialog;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    dateDisplay = (TextView)findViewById(R.id.dateDisplay);

    Button datePickerButton = (Button)findViewById(R.id.datepickerbutton);
    datePickerButton.setOnClickListener(datePickerButtonOnClickListener);
    }
private Button.OnClickListener datePickerButtonOnClickListener
= new Button.OnClickListener(){

    @Override
    public void onClick(View v) {
        final Calendar c = Calendar.getInstance(); 
        mDialog = new CustomDPDialog(getContext(), this, 
        c.get(Calendar.YEAR), c.get(Calendar.MONTH), 
        c.get(Calendar.DAY_OF_MONTH)); 
        mDialog.show(); 
        DatePicker dp = findDatePicker((ViewGroup) mDialog.getWindow().getDecorView()); 
        if (dp != null) { 
        ((ViewGroup) dp.getChildAt(0)).getChildAt(0).setVisibility(View.GONE);
        }
    }

    class CustomDPDialog extends DatePickerDialog {
        public CustomDPDialog(Context context, 
                OnDateSetListener callBack, int myYear, int myMonth, 
                int myDay) {
                super(context, callBack, myYear, myMonth, myDay);
                }
        @Override 
        public void onDateChanged(DatePicker view, int year, int month, int day) {
            super.onDateChanged(view, year, month, day);
            mDialog.setTitle((month + 1) + "-" + day + "-");
        }

    }

    private DatePicker findDatePicker(ViewGroup group) {
        if (group != null) {
            for (int i = 0, j = group.getChildCount(); i < j; i++) {
                View child = group.getChildAt(i);
                if (child instanceof DatePicker) {
                    return (DatePicker) child;
                } else if (child instanceof ViewGroup) {
                    DatePicker result = findDatePicker((ViewGroup) child);
                    if (result != null)
                        return result;
                }
            }
        }
        return null;
    }
};
}
4

3 に答える 3

2

試す

v.getContext()

また

getApplicationContext()

getApplicationContext()は時々問題を引き起こす可能性があるため、最初のものをお勧めします

于 2012-05-04T21:58:51.547 に答える
0

getActivity()あなたのためにトリックをする必要があります。

于 2012-05-04T22:13:13.380 に答える
0

ActivityName.this動作するはずです

于 2012-05-04T22:16:56.810 に答える