如何为AutoCompleteTextView设置setOnClickListener?

24

我正在为AutoCompleteTextView选择文本。选择完成后,我想对所选文本应用setonclicklistener。请问有什么办法吗?

ArrayAdapter<String> arrAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, sampleACTV); 
 AutoCompleteTextView ACTV = (AutoCompleteTextView) findViewById(R.id.spinner);
 ACTV.setAdapter(arrAdapter); 

 }
 private static final String[] sampleACTV = new String[]
         { "android","androidpeople.com","iphone","blackberry" }; 

在我的例子中,我选择一个类似于android的东西,通过调用意图(intent)来进入下一个Activity。


http://developer.android.com/reference/android/widget/AutoCompleteTextView.html#setOnItemClickListener(android.widget.AdapterView.OnItemClickListener) - Nikunj Patel
5个回答

67

AutoCompleteTextView中有不同的点击监听器。

第一种方式是在布局xml中定义onCLick属性,可以使用要调用的函数,如下例中的clicked。

<AutoCompleteTextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/spinner"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:onClick="clicked" />

然后,在你的活动中,定义clicked函数。

public void clicked(View v) { 
  // on click do ..
} 

或者您可以直接在代码中设置:

ACTV.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        finish();
    }
});

如果你想要在用户点击下拉列表中的项目时设置点击监听器,有另一种方法,即setOnItemClickListener

ACTV.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick (AdapterView<?> parent, View view, int position, long id) {
        //... your stuff
    }
})

你还有最后一种选择,就是使用setOnItemSelectedListener在用户实际选择下拉列表中的项目时设置点击监听器。

ACTV.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected (AdapterView<?> parent, View view, int position, long id) {
        //... your stuff
    }
    @Override
    public void onNothingSelected (AdapterView<?> parent) {
        //... your stuff
    }
})

参考文献:

http://developer.android.com/reference/android/widget/AutoCompleteTextView.html

祝好运!


1
你不觉得 clicked 方法应该有 (Views view) 作为参数吗? - Paresh Mayani
1
@caiocpricci2 应该是 ACTV.setOnItemSelectedListener 而不是 ACTV.setOnSelectedListener。 - ajdeguzman
声明android:onClick="clicked"会产生以下错误。 Caused by: java.lang.NullPointerException: Attempt to write to field 'android.view.View$OnClickListener android.widget.AutoCompleteTextView$PassThroughClickListener.mWrapped' on a null object reference - Kavin Raju S

2
你需要创建自定义适配器并在getView()中为视图分配OnClick事件。

1
谁说这不是一个好建议?你给视图分配了一个点击,这很自然,对吧? - Cyph3rCod3r
是的,但那个视图会被重复使用,所以它可能会成为一个潜在的错误源。话虽如此,它确实能够工作,在某些情况下也是唯一的选择。 - sulai

0

创建自定义适配器,在getView()方法中为每个视图设置setonclicklistener并调用接口方法。

在片段中覆盖接口,并将其传递给适配器,因此当单击时,您将在片段中获得单击。

interface IOnClick{
    fun onClick(model: Model)
}

override fun onClick(model: Model) {
        viewModel.setFormDataOnIdSelection(Model)
        binding.tietName.dismissDropDown()
    }

override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
    newView.setOnClickListener {
        iOnClick.onClick(resAllLeadsModel)
    }
}

binding.tietName.setOnItemClickListener { parent, view, position, id ->
    viewModel.setFormDataOnIdSelection(listOfItems[view.tag.toString().toInt()])
}

这将在任何情况下都按照您的要求工作。

如果您有任何建议,请告诉我,谢谢。


0

这是一个非常古老的帖子,所以我不确定这会有多大帮助,但是现在在 Kotlin 中,这真的很容易。我有一个文本自动完成框,其中填充了来自字典的值,并访问名为 searchAutoComplete 的自动完成下拉文本是 ...

        searchAutoComplete.setOnItemClickListener { 
           parent, view, position, rowId ->
            Log.d(TAG, "searchAutoComplete: setOnItemClickListener," +
                    "view -> ${view.javaClass.simpleName}, " +
                    "pos = $position. " +
                    "text = ${(view as TextView).text}")
        }

-1

这对我来说完美地运作。

Actvl.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected (AdapterView<?> parent, View view, int position, long id) {
        //... your stuff
    }
    @Override
    public void onNothingSelected (AdapterView<?> parent) {
        //... your stuff
    }
});

他正在要求视图点击监听器而不是项目选择监听器。 - Asad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接