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

如何在Android中获取触发事件的视图?,android,Android,您知道如何获取触发事件的视图吗? 举例来说: final AutoCompleteTextView edtxInput = (AutoCompleteTextView)layout.findViewById(R.id.edtx_input); edtxInput.setThreshold(2); edtxInput.setOnItemClickListener(new OnItemClickListener() { public void onItem

您知道如何获取触发事件的视图吗? 举例来说:

    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());
        }
    });
final AutoCompleteTextView edtxInput=(AutoCompleteTextView)layout.findViewById(R.id.edtx\u输入);
设置阈值(2);
setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父视图、视图arg1、整型位置、长arg3){
调试(标记,“视图:”+arg1,Console.Liviu);
edtxInput.setText(((FormOption)edtxInput.getAdapter().getItem(position)).getDescription());
}
});
这里的问题是,我不知道如何在不使其成为最终文本的情况下更新edtxInput中的文本


谢谢

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

检查此项

参数

设置发生单击的AdapterView的父级

arg1是自动完成文本视图(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

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

如果您只需要适配器,您可以编写这个,也可以只编写这个

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

为什么使变量成为最终变量对您如此不利?您可以通过任何方式使EDT变得全球化。请参阅下面的代码

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());
    }
}
公共类myActivity扩展活动实现了McClickListener{
AutoCompleteTextView mEditTextInput;
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
mEditTextInput=(AutoCompleteTextView)layout.findViewById(R.id.edtx\u输入);
mEditTextInput.setOnItemClickListener(此);
}
public void onItemClick(AdapterView父视图、视图arg1、整型位置、长arg3){
调试(标记,“视图:”+arg1,Console.Liviu);
mEditTextInput.setText(((FormOption)mEditTextInput.getAdapter().getItem(position)).getDescription());
}
}

仅此而已。

这比公布最终答案还要糟糕。您知道为什么不能像这样(AutoCompleteTextView)父级强制转换吗?Eclipse给我一个错误“无法从AdapterView转换为AutoCompleteTextView”。很抱歉,给我5分钟时间自己测试并正确发布代码。我正在生成一个表单,但该表单可能有未知数量的autocomplete字段,如果我将每个新的AutoCompleteTeview设置为最终,我将有内存泄漏。我的方法看起来是这样的:。恐怕我的解决方案无法解决您的内存泄漏问题。您没有创建新视图。您只需获得相同视图的引用(安全)。不管怎样,把东西放在范围内总是很重要的better@weakwire:“AutoCompleteTextView medtxInput=(AutoCompleteTextView)view.getParent();”这会引发一个异常,表示“无法将表单ListView强制转换为AutoCompleteTextView”。它将“视图”的父视图作为列表视图。我不能将其设置为全局视图,因为我的应用程序需要是通用的,因此用户应该能够在布局中添加他想要的AutoCompleteTextView的数量。
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());
    }
}