如何在 Android Studio 中使用 ArrayAdapter<String> 作为 OnClickListener?

How to use ArrayAdapter<String> inside as OnClickListener in Android Studio?

我想在单击按钮时填充我的 ListView,但 ArrayAdapter 的构造函数有问题。

当我在 "onCreate" 方法中使用此代码时它工作正常,我认为当我在 OnClickListener 中使用 ArrayAdapter 时 "this" 关键字会导致此问题。

mybtn = (Button) findViewById(R.id.buttonTest);
myXMLListView=(ListView)findViewById(R.id.xmlListView);

View.OnClickListener myClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            ArrayList<String> your_array_list = new ArrayList<String>();
            your_array_list.add("foo");
            your_array_list.add("bar");

            ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,
                    android.R.layout.simple_list_item_1,your_array_list);

            myXMLListView.setAdapter(arrayAdapter);
        }
    };
    mybtn.setOnClickListener(myClickListener);

Error:(62, 53) error: no suitable constructor found for ArrayAdapter(,int,ArrayList) constructor ArrayAdapter.ArrayAdapter(Context,int,int,List) is not applicable (actual and formal argument lists differ in length) constructor ArrayAdapter.ArrayAdapter(Context,int,List) is not applicable (actual argument cannot be converted to Context by method invocation conversion) constructor ArrayAdapter.ArrayAdapter(Context,int,int,String[]) is not applicable (actual and formal argument lists differ in length) constructor ArrayAdapter.ArrayAdapter(Context,int,String[]) is not applicable (actual argument cannot be converted to Context by method invocation conversion) constructor ArrayAdapter.ArrayAdapter(Context,int,int) is not applicable (actual argument cannot be converted to Context by method invocation conversion) constructor ArrayAdapter.ArrayAdapter(Context,int) is not applicable (actual and formal argument lists differ in length)

实例化ArrayAdapter如下:

ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(ActivityName.this,
                    android.R.layout.simple_list_item_1,your_array_list);

this 的含义与您使用它的地方不同,因此参数类型不匹配。在构造函数中使用 ActivityName.this 而不仅仅是 this,其中 ActivityName 是包含该代码的 activity 的名称。

声明一个全局上下文,在 onCreate 中对其进行初始化,然后在 ArrayAdapter 中使用它

private Context context;

//Inside OnCreate
context = this;

那么你可以使用这个上下文

ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(context,
                android.R.layout.simple_list_item_1,your_array_list);