【问题标题】:Android doesn't detect click on EditTextAndroid 未检测到点击 EditText
【发布时间】:2013-01-18 01:34:19
【问题描述】:

我正在开发一个带有一些复杂表单的 Android 平板电脑应用程序(布局有一个 ListView 和包含表单的布局,所以我必须膨胀 EditText)。我的想法是,如果我单击显示日期的 TextView,DataPicker 将显示在对话框中。

问题是未检测到点击。没有日志。

Java:

    public static EditText datep;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.admissions_all);

        ActionBar actionBar = getActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);

        View inf = LayoutInflater.from(getApplicationContext()).inflate(R.layout.admissions, null);
        datep = (EditText) inf.findViewById(R.id.date_value);

        datep.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Log.i("Date", "You clicked me mate!");
                showDatePickerDialog(v);
            }
        });

    }

    public void showDatePickerDialog(View v) {
        DialogFragment newFragment = new DatePickerFragment();
        newFragment.show(getFragmentManager(), "datePicker");
        Log.i("Date", "I want to show datePicker");
    }

    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) {
             datep.setText(day + "." + month+ "." + year);
        }
    }

XML:

<RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@id/general"
        android:layout_alignRight="@id/general"
        android:layout_below="@+id/general"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="30dp" >

        <TextView
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:text="Data"
            android:textAppearance="?android:attr/textAppearanceLarge" />

        <View
            android:id="@+id/line"
            android:layout_width="wrap_content"
            android:layout_height="1dp"
            android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
            android:layout_below="@+id/title"
            android:background="#333333" />

        <EditText
            android:id="@+id/date_value"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/line"
            android:layout_marginLeft="5dp"
            android:layout_marginTop="5dp"
            android:layout_toRightOf="@+id/date_desc"
            android:ems="9"
            android:inputType="date" >
        </EditText>

        <TextView
            android:id="@+id/date_desc"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/date_value"
            android:layout_alignBottom="@+id/date_value"
            android:layout_alignParentLeft="true"
            android:text="Date:"
            android:textAppearance="?android:attr/textAppearanceMedium" />

</RelativeLayout>

我关注了这个:http://developer.android.com/guide/topics/ui/controls/pickers.html

【问题讨论】:

  • 你能看到onClick里面的日志吗?
  • 这段代码是写在activity中的吗?
  • 你为什么使用 View inf.?
  • 我认为你将你的 textview 作为你的 xml 中的 wrap_content ,然后你正确点击文本只有它工作,上传你的 xml
  • 是的,它在活动中。我必须膨胀 textview,因为主布局(R.layout.admissions_all)具有包含表单的布局(R.layout.admissions)

标签: android datepicker textview


【解决方案1】:

您需要将 date_value 在触摸模式下的可聚焦设置为 false。您可以通过将android:focusableInTouchMode="false" 添加到您的xml 或在您的代码中使用datep.setFocusableInTouchMode(false); 来实现。这应该会触发您的点击事件。 (在模拟器上测试)

另请参阅:How to do something after user clicks on my EditText

参考:http://android-developers.blogspot.com/2008/12/touch-mode.html

【讨论】:

    【解决方案2】:

    我没有看到任何dateup.setclickable(true);,尝试添加这个。也许这就是它不起作用的原因,你也可以调试它,看看它是否调用onlciklistner

    我看到你写了这样的东西。

    datep = (EditText) inf.findViewById(R.id.date_value);
    

    当你有这个时

    setContentView(R.layout.admissions_all);
    

    这意味着你editText在另一个活动中,但是你将他的onclickListner设置在另一个活动中,所以它不起作用。在activity中初始化他的onlcikListner,那个内容视图就是inf.xml。如果所有这些都无济于事,请添加更多代码部分

    问候海克·纳哈佩蒂安

    【讨论】:

      【解决方案3】:

      您能否将 DatePickerFragment 更改为 DatePickerDialog。然后做一个 DatePickerDialog.show(); 类似的东西:

      DatePickerDialog datePickerDialog = null;
      datep.setOnClickListener(new View.OnClickListener() {
              public void onClick(View v) {
                  Log.i("Date", "You clicked me mate!");
                  showDatePickerDialog();
              }
          });
      
      private void showDatePickerDialog() {
          datePickerDialog = new DatePickerDialog(context, new DateSetListener(), year, month, day);
          datePickerDialog.show();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-07-17
        • 1970-01-01
        • 2021-01-24
        • 2011-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多