【问题标题】:Android: how to get AutoCompleteTextView inside onItemClickAndroid:如何在 onItemClick 中获取 AutoCompleteTextView
【发布时间】:2015-01-04 15:47:16
【问题描述】:

单击列表中的值后,我试图获取 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,并且我会根据所选值自动填写一堆其他字段。

【问题讨论】:

    标签: android autocompletetextview


    【解决方案1】:

    查看this answer 中的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:
                //...
        }
    }
    

    【讨论】:

      【解决方案2】:

      更简单的方法:

      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
      
          }
      }
      

      【讨论】:

        【解决方案3】:

        我不确定视图 ID 是什么意思?你想得到选定的值吗? 如果是,那么下面的代码将执行此操作,否则请进一步说明您需要什么以及为什么要访问视图本身。

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

        有关适配器方法的更多信息是here

        【讨论】:

        • View id = 对应于用户正在填写的 AutoCompleteTextView 的 int。与 R.id.id_of_autocompleteTextView 相同。我需要访问它,因为它对应于我的数据库中的一列,我将使用它来运行查询以填充其他视图。
        • @Vini.g.fer 我不明白,是什么让你需要这样的东西?你在数据库中使用了android资源id(r.id.xxx)吗?
        • 是的,我做到了。我存储了一个带有匹配 R.id.xxx 的键的 JSON 对象。
        【解决方案4】:

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

        【讨论】:

        • 感谢您的帮助,但这并不能帮助我确定点击了哪个视图。我可以有 3 到 5 个 AutoCompleteTextView。我正在尝试查找用户填写的视图的 ID。
        • onItemCLick 给出了被点击的列表项的位置。你在一个列表项中有多个 AutoCompleteTextView 吗?
        • 我有 3 个列表与 3 个 AutoCompleteTextViews 关联。
        • 那么每个 AutoCompleteTextViews 都会有 3 个 onItemClickedListener 对吗?所以你可以很容易地找出调用了哪个onCLickListener
        • 嗯,这可能会奏效!但我喜欢用一种方法“集中”所有听众。代码在我看来更有条理。这就是我在扩展 Activity 的类之后使用“实现 OnClickListener、OnItemClickListener”的原因。如果我决定使用“implements OnItemClickListener”,有什么方法可以达到同样的效果?
        猜你喜欢
        • 2014-02-02
        • 1970-01-01
        • 1970-01-01
        • 2012-10-23
        • 1970-01-01
        • 2012-06-15
        • 1970-01-01
        • 1970-01-01
        • 2016-01-10
        相关资源
        最近更新 更多