确定如何从onItemClick中获取AutoCompleteTextView

4

您是否可以从onItemClick回调函数的参数中确定AutoCompleteTextView的来源?

我有以下回调函数,如果我点击AutoCompleteTextView的选择弹出窗口中的项目,则会正确触发该函数:

public void onItemClick(AdapterView<?> adaptView, View view, int position, 
        long id) {
}

我知道我可以实现自己的每个文本视图监听器类,但我想仅通过回调函数的参数确定哪个AutoCompleteTextView发起了单击 - 这可能吗?
4个回答

5

我对这个问题没有肯定的答案(我认为不可能)。但是我使用了一种解决方法来达到同样的目的(从 onItemClick 中找到 AutoCompleteTextView):

我定义了以下类,可以用于修改 onItemClick 调用以提供 AutoCompleteTextView 作为第二个参数(而不是原始的 View 参数)。

public class AutoCompleteTextViewClickListener implements OnItemClickListener {
       AutoCompleteTextView mAutoComplete;
       OnItemClickListener mOriginalListener;

       public AutoCompleteTextViewClickListener(AutoCompleteTextView acTextView, 
               OnItemClickListener originalListener) {
           mAutoComplete = acTextView;
           mOriginalListener = originalListener;
       }

       public void onItemClick(AdapterView<?> adView, View view, int position,
               long id) {
           mOriginalListener.onItemClick(adView, mAutoComplete, position, id);
       }       
}

这可以按以下方式使用:
代替使用:
myTextView.setOnItemClickListener(myListener);

你需要编写:
myTextView.setOnItemClickListener(
        new AutoCompleteTextViewClickListener(myTextView, myListener));

现在,每当TextView触发onItemClicked时,原始视图值的引用将被替换为AutoCompleteTextView的引用。

4
如果你想知道在autoCompleteTextView1和autoCompleteTextView2之间哪一个是当前点击的自动完成文本视图,只需要检查它们的适配器...
public void onItemClick(AdapterView<?> adaptView, View view, int position, long id) {
    AutoCompleteTextView currentClickedAutoCompleteTextView;
    if( adaptView.getAdapter()==autoCompleteTextView1.getAdapter() )
        currentClickedAutoCompleteTextView = autoCompleteTextView1;
    else
        currentClickedAutoCompleteTextView = autoCompleteTextView2;
}

我认为回答第一个问题很清楚了。currentAutoCompleteTextView就是问题需要的。autoCompleteTextView1和autoCompleteTextView2是被点击的AutoCompleteTextView实例。无论如何,我编辑了代码以使您更加清晰。 - talklesscodemore

0

根据@talklesscodemore的回答,我是这样解决的(我有2个AutoCompleteTextView,如果有更多,您必须适应以下内容):

AutoCompleteTextView firstDropdown;
AutoCompleteTextView secondDropdown;

...

@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
    if (isAdapterViewFromFirstDropdown(adapterView)) {
       // Code specific for 1st ACTV
    } else {
       // Code specific for 2nd ACTV
    }
}

private boolean isAdapterViewFromFirstDropdown(AdapterView<?> adapterView) {
    return adapterView.getAdapter().equals(firstDropdown.getAdapter());
}

0
我使用了yonoyjoy答案的简化版。它只将AutoCompleteTextView传递给构造函数。
public class AutoCompleteTextViewClickListener implements AdapterView.OnItemClickListener {
    private AutoCompleteTextView mView;

    public AutoCompleteTextView getView() {
        return mView;
    }

    public AutoCompleteTextViewClickListener(AutoCompleteTextView view) {
        this.mView = view;
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    }
}

然后在您的Activity中,您只需像在普通的OnClickListener中一样覆盖onItemClick(),但使用this.getView()来获取您的ACTV:

autoCompleteTextView.setOnItemClickListener(new AutoCompleteTextViewClickListener(v){
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        super.onItemClick(parent, view, position, id);
        AutoCompleteTextView v = this.getView();

        //Do stuff.

    }
});

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