如何在Android中获取触发事件的视图?

时间:2012-09-19 07:42:40

标签: android

您知道如何获得触发事件的视图吗?  例如:

    final AutoCompleteTextView edtxInput = (AutoCompleteTextView)layout.findViewById(R.id.edtx_input);  
    edtxInput.setThreshold(2);
    edtxInput.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View arg1, int position, long arg3) {
            Console.debug(TAG, "view: " + arg1, Console.Liviu);             
            edtxInput.setText(((FormOption)edtxInput.getAdapter().getItem(position)).getDescription());
        }
    });

这里的问题是我不知道如何在OnItemClickListener中更新edtxInput中的文本,而不是最终的。

由于

3 个答案:

答案 0 :(得分:2)

选中此http://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html

  

参数

     

parent发生点击的AdapterView。

arg1是AutoCompleteTextView(edtxInput)本身。所以你可以做到

 AutoCompleteTextView edtxInput = (AutoCompleteTextView)layout.findViewById(R.id.edtx_input);  
    edtxInput.setThreshold(2);
    edtxInput.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View arg1, int position, long arg3) {
            Console.debug(TAG, "view: " + arg1, Console.Liviu); 
AutoCompleteTextView medtxInput = (AutoCompleteTextView)parent;
                medtxInput.setText(((FormOption)medtxInput.getAdapter().getItem(position)).getDescription());
            }
        });

<强>更新

似乎AutoCompleteTextView不是AdapterView的子类。这是SDK的某些部分“错误”。要获得AutoCompleteTextView你可以做一个黑客

 AutoCompleteTextView medtxInput = (AutoCompleteTextView)view.getParent();

因此,您获得点击的视图,然后获取其AutoCompleteTextView

的父级

但是为什么你不希望AutoCompleteTextView首先成为最终的?有什么特别的原因吗?

如果您只想要适配器,则只能编写此

((ChildClass)parent.getItemAtPosition(position)).getDescription();

答案 1 :(得分:0)

将edtxInput声明为全局变量,以便在整个类中可以访问此变量。

答案 2 :(得分:0)

为什么制作变量决赛对你来说太糟糕了?你可以用任何方式使edtxInput全局化。见下面的代码

public class myActivity extends Activity implements OnItemClickListener {

    AutoCompleteTextView mEditTextInput;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mEditTextInput = (AutoCompleteTextView)layout.findViewById(R.id.edtx_input);
        mEditTextInput.setOnItemClickListener(this);
    }

    public void onItemClick(AdapterView<?> parent, View arg1, int position, long arg3) {
        Console.debug(TAG, "view: " + arg1, Console.Liviu);             
        mEditTextInput.setText(((FormOption)mEditTextInput.getAdapter().getItem(position)).getDescription());
    }
}

多数人。