Android Studio,从innerclass填充listView

时间:2017-03-02 19:16:03

标签: java android listview android-studio

这是我的代码,当我使用

List<String> array = new ArrayList<String>();

array.add("kk");
array.add("bb");

ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,array);

listView1.setAdapter(adapter);

这在我的onCreate方法中可以正常工作,但问题是我不能在一个非同义的类中'我'。用getApplicationContext()替换'this'在某些原因上不起作用,无论是在onCreate内部还是外部。

像这样

ArrayAdapter adapter = new ArrayAdapter(getApplicationContext(),android.R.layout.simple_list_item_1,array);

任何人都可以帮我找到我搜索过的问题,但无法在任何地方找到答案

由于

3 个答案:

答案 0 :(得分:1)

我会通过内部类的构造函数中的参数传递this-pointer并将其保存在内部类字段中,如下所示 - &gt;

public class outerclass{
    @Override
    protected void onCreate(Bundle savedInstanceState){
    //.. other stuff
    innerclass ic = new innerclass(this);
    //.. other stuff
    }

    public class innerclass{
        private Context c;
        public innerclass(Context c){
            this.c = c;
        }
    }
}

答案 1 :(得分:1)

当您使用适配器将某些内容添加到列表或数组中时,您需要提醒列表(在本例中为数组)中发生了更改。调用add函数后,需要调用adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,listItems);

此外,在声明适配器时,将其声明在onCreate()之外,然后在onCreate()

中分配您的值

public class MainActivity extends AppCompatActivity { // List of array strings that will represent list items public static ArrayList<String> listItems = new ArrayList<String>(); // Array string will handle the information stored in the listview public static ArrayAdapter<String> adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lView = (ListView) findViewById(R.id.list); adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listItems); lView.setAdapter(adapter); } }

见下文:

listItems.add(<value>);
adapter.notifyDataSetChanged();

然后你可以打电话:

listItems.clear();

然后,如果需要,您还可以访问: adapter.clear();r

希望这有帮助!

答案 2 :(得分:0)

我假设你的匿名类在你的MainActivity中。如果是这种情况,您可以这样做:

ArrayAdapter adapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1, array);

当你使用&#34;这个&#34;在您的匿名类中,它引用匿名内部类实例而不是外部类的实例。