Android: 如何在onItemClick中获取AutoCompleteTextView

3

我正在尝试在单击列表上的值后获取AutoCompleteTextView的ID。尝试在Google和StackOverflow上查找,但提供的答案都没有起作用。这是我的代码:

在类声明中创建了视图:

public class ActivityCadastrarCliente extends Activity implements OnClickListener, OnItemClickListener {
    AutoCompleteTextView E_Nome_Cliente, E_CPF;
    List<String> Nomes = new ArrayList<String>();
    ...

将视图与XML元素关联:

E_Nome_Cliente = (AutoCompleteTextView)findViewById(R.id.Nome_Cliente);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, Nomes.toArray(new String[0]));
E_Nome_Cliente.setAdapter(adapter);
E_Nome_Cliente.setOnItemClickListener(this);

我的onItemClick方法如下正常调用:

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    //switch (parent.getId()) { 
        //case R.id.Nome_Cliente:
            ...

    //}
}

有没有人知道我如何在onItemClick中访问此视图?尝试了几种方法,但只得到异常:

//Class cast exception
AutoCompleteTextView input = (AutoCompleteTextView)view.getParent();
//Class cast exception
AutoCompleteTextView input = (AutoCompleteTextView)parent;
//Class cast exception
AutoCompleteTextView input = (AutoCompleteTextView)parent.getParent();

我需要识别哪个视图被点击了,因为我正在使用3到5个AutoCompleteTextView,根据所选值,我将自动填充一堆其他字段。

4个回答

3
请查看这个答案中的AutoCompleteTextViewClickListener类。
请按以下方式更改您的setOnItemClickListener调用:
E_Nome_Cliente.setOnItemClickListener(
        new AutoCompleteTextViewClickListener(E_Nome_Cliente, this));

现在你可以通过访问修改后的视图参数来获取id:

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    //view had been modified by AutoCompleteTextViewClickListener 
    //to contain the original AutoCompleteTextView
    switch (view.getId()) { 
        case R.id.Nome_Cliente:
            //...
    }
}

1
一种更简单的方法:
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

    Adapter adapter = parent.getAdapter();

    if (adapter == autoCompleteTextView1.getAdapter()) {

        // Do something

    } else if (adapter == autoCompleteTextView2.getAdapter()) {

        // Do something else

    }
}

0

我不确定您所说的“视图ID”是什么意思?您想获取选定的值吗? 如果是的话,下面的代码可以实现,否则请更清楚地说明您需要什么以及为什么要访问视图本身。

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    //switch (parent.getId()) { 
       String selected = adapter.getItem(position);

    //}
}

更多关于适配器方法请点击此处


视图ID = 用户正在填写的AutoCompleteTextView对应的整数。与R.id.id_of_autocompleteTextView相同。我需要访问它,因为它对应于我的数据库中的一列,我将使用它来运行查询以填充其他视图。 - Vini.g.fer
@Vini.g.fer,我不明白你为什么需要这样的东西?你在数据库中使用了Android资源ID(r.id.xxx)吗? - Yazan
是的,我做了。我存储了一个JSON对象,其中键与R.id.xxx匹配。 - Vini.g.fer

0
AutoCompleteTextView的父级上使用parent.findViewById(R.id.id_of_autocompleteTextView)

谢谢您的帮助,但这并不能帮助我确定是哪个视图被点击了。我可能有3到5个AutoCompleteTextViews。我正在尝试找到用户正在填写的视图的ID。 - Vini.g.fer
onItemClick 会返回被点击的列表项的位置。您在列表项中是否有多个 AutoCompleteTextView? - ashkhn
我有3个列表与3个自动完成文本视图相关联。 - Vini.g.fer
那么每个AutoCompleteTextView都会有3个onItemClickedListener,对吧?这样你就可以轻松地找出哪个onCLickListener被调用了。 - ashkhn
1
嗯,那很可能可行!但我喜欢将所有的侦听器都集中在一个方法中。这样代码看起来更加有条理。这就是为什么在我的类扩展Activity之后我使用了"implements OnClickListener, OnItemClickListener"。如果我决定使用"implements OnItemClickListener",是否还有办法达到相同的效果呢? - Vini.g.fer

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