访问内部类中的变量

时间:2015-05-31 23:16:54

标签: android

我有一个列表,我想设置它的OnItemLongClickListener来显示TimePickerDialog。

问题是Picker无法从调用它的项目中获取任何值。

    lst_meetings.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> adapterView, View view, int pos, long l) {

            TimePickerDialog timePickerDialog = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
                @Override
                public void onTimeSet(TimePicker timePicker, int i, int i1) {
                    if (timePicker.isShown())finishMeeting(Integer.parseInt(((TextView) view.findViewById(R.id.txt_No)).getText().toString()),String.format("%02d", i) + ":" + String.format("%02d", i1) + ":00");
                }
            },0,0,false);
            timePickerDialog.setTitle("Finish Time");
            timePickerDialog.show();
            return true;
        }
    });

Setting view as final is not allowed.

如何将View传递给匿名类。

1 个答案:

答案 0 :(得分:0)

您可以使用final View方法中可见的临时onTimeSet()

另外,请确保您拥有TimePickerDialog的有效上下文,因此请使用MainActivity.this代替this(将MainActivity替换为您的活动名称)。

试试这个:

       lst_meetings.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> adapterView, View view, int pos, long l) {

                final View tempView = view; //added

                TimePickerDialog timePickerDialog = new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {
                    @Override
                    public void onTimeSet(TimePicker timePicker, int i, int i1) {
                        // use tempView here:
                        if (timePicker.isShown())finishMeeting(Integer.parseInt(((TextView) tempView.findViewById(R.id.txt_No)).getText().toString()),String.format("%02d", i) + ":" + String.format("%02d", i1) + ":00");
                    }
                },0,0,false);
                timePickerDialog.setTitle("Finish Time");
                timePickerDialog.show();
                return true;
            }
        });
相关问题