AutoCompleteTextView单击侦听器无法正常工作

时间:2014-06-12 06:19:29

标签: android autocompletetextview

我正在创建一个Android应用程序,我正在使用AutoCompleteTextView并尝试设置onClickListener以在点击AutoCompleteTextView时重置输入的值。

问题是我有两个AutoCompleteTextView所以当我在第一个AutoCompleteTextView输入文本然后第二个AutoCompleteTextView然后点击第一个AutoCompleteTextView然后它没有调用OnClickListener时第一个AutoCompleteTextView

知道为什么这会表现得如此奇怪吗?

<AutoCompleteTextView
    android:id="@+id/fromStationEdit"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/TextView1"
    android:layout_marginLeft="12dp"
    android:layout_marginTop="3dp"
    android:background="@drawable/apptheme_edit_text_holo_light"
    android:drawableRight="@drawable/ic_rail"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:imeOptions="actionNext"
    android:paddingLeft="8dp"
    android:singleLine="true"
    android:textColor="@color/black"
    android:textColorHighlight="@android:color/black"
    android:textCursorDrawable="@null"
    android:textSize="16sp" >

    <requestFocus />
</AutoCompleteTextView>

AutoCompleteTextView上的ClickListener。

// reset the value when user click on this view
source_stn_txt.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {
        source_stn_txt.setText("");
    }
});

// reset the value when user click on this view
dest_stn_txt.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View view) {
        dest_stn_txt.setText("");
    }
});

source_stn_txt.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
            long arg3) {
        source = source_stn_txt.getText().toString().trim();
        dest_stn_txt.requestFocus();
    }
});

提前致谢。

3 个答案:

答案 0 :(得分:2)

帮助@Williams的链接是:onClick event is not triggering | Android。也在上面的评论中发布。我很高兴你找到了解决方案!

  

当用户与UI元素交互时,将以自上而下的顺序调用各种侦听器。 (例如:OnTouch - &gt; OnFocusChange - &gt; OnClick。)如果已定义了一个侦听器(使用setOn ... Listener)并且它使用此事件:将不会调用较低优先级的侦听器。就其本质而言,当您第一次触摸EditText时,它会使用OnFocusChangeListener接收焦点,以便用户可以键入。此处消耗的操作因此不会调用OnClick。每次连续触摸都不会改变焦点,因此事件会逐渐变为OnClickListener。

答案 1 :(得分:1)

您需要使用AdapterView.OnItemClickListener()而不是OnClickListener

    AutoCompleteTextView actv = (AutoCompleteTextView) findViewById(R.id.fromStationEdit);

    String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
            "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
            "Linux", "OS/2", "Ubuntu"};

    ArrayList<String> list = new ArrayList<String>();
    for (int i = 0; i < values.length; ++i) {
        list.add(values[i]);
    }
    final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, list);
    actv.setAdapter(adapter);

    actv.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            Toast.makeText(MainActivity.this,
                    adapter.getItem(position).toString(),
                    Toast.LENGTH_SHORT).show();
        }
    });

答案 2 :(得分:0)

您是否已在Strings.xml中声明要完成的项目。如果没有,请执行以下操作:

<?xml version="1.0" encoding="utf-8"?>
<resources>

<string name="app_name">AutoComplete</string>
<string name="action_settings">Settings</string>
<string name="hello_world">Hello world!</string>
<string name="auto_complete">AutoComplete</string>
<string name="multi_auto_complete">Multi AutoComplete</string>
<string-array name="list_of_countries">
  <item >USA</item>
  <item >Uk</item>
  <item >Canada</item>
  <item >Australia</item>
  <item >France</item>
  <item >Italy</item>
  <item >China</item>
  <item >Japan</item>
  <item >Spain</item>
  </string-array>

</resources>

或在您的班级中声明活动:

AutoCompleteTextView myAutoComplete;

String item[]={
"January", "February", "March", "April",
"May", "June", "July", "August",
"September", "October", "November", "December"
};