ListView的内容未显示 - Android

时间:2017-02-26 15:51:14

标签: java android listview

我正在MainActivity中构建ArrayAdapter,其中包含用户列表。我使用以下内容初始化ListViewadapter = new ArrayAdapter<String>(this, R.layout.activity_main_component, array); listView = (ListView) findViewById(R.id.list); listView.setAdapter(adapter);

ArrayList

我使用以下函数填充public void usersUpdated(Message mes) { try { JSONObject jsonObj = new JSONObject(mes.body.getField(Fields.BODY).toString()); JSONArray jsonArr = (JSONArray) jsonObj.get("listOfUsers"); array = new ArrayList<>(); for (int i = 0; i < jsonArr.length(); i++) { System.out.println("Added : " + jsonArr.get(i).toString()); System.out.println(jsonArr.get(i).toString().getClass().getName()); array.add(jsonArr.get(i).toString()); } System.out.println(array); runOnUiThread(new Runnable() { public void run() { adapter.notifyDataSetChanged(); } }); } catch (Exception e) { e.printStackTrace(); } } 的内容:

activity_main.xml

以下是我<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:weightSum="1"> <ListView android:layout_width="match_parent" android:layout_height="332dp" android:id="@+id/list" android:layout_weight="0.70" /> </LinearLayout> 的相关部分:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/label"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dip"
android:textSize="16dip"
android:textStyle="bold" >
</TextView>

这是我的activity_main_component.xml:

ArrayList

runOnUiThread正在填充,因为usersUpdated()函数中list之前的打印语句告诉我。但是,let storyboard = UIStoryboard(name: "StoryboardName", bundle: nil) let vc = storyboard.instantiateViewController(withIdentifier: "RegistrationController") navigationcontroller?.pushViewController(vc, animated: true) 显示为空白。关于什么可能出错的任何想法?

2 个答案:

答案 0 :(得分:2)

TextView id重命名为android:id="@android:id/text1",因为adapter会将TextView id作为android:id="@android:id/text1"来查找设置数据

<TextView xmlns:android="http://schemas.android.com/apk/res/android"      
    android:id="@android:id/text1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="10dip"
    android:textSize="16dip"
    android:textStyle="bold" >
</TextView>

或者您可以提及TextView id告诉适配器查找TextView

在创建适配器

时提及您的TextView ID

ArrayAdapter (Context context,int resource,int textViewResourceId,List<T> objects)

   new ArrayAdapter<String>(this, R.layout.activity_main_component,R.id.label, array);

也请遵循@Cricket和@Selvin的建议来完成答案并使用array.clear()而不是创建新的ArrayList对象

为清晰起见,请阅读Is Java “pass-by-reference” or “pass-by-value”?

答案 1 :(得分:2)

而不是这个

array = new ArrayList<>();

您需要清除列表。

array.clear();

否则,适配器将丢失对其列表的引用

(您也可以直接添加到ArrayAdapter而不是通过列表; adapter.add(String)以及adapter.clear()

并替换

android:id="@+id/label"

android:id="@android:id/text1"

因为这是String的ArrayAdapter默认查找的id

或使用此构造函数

ArrayAdapter (Context context, 
            int resource,   // set to R.layout.activity_main_component
            int textViewResourceId,  // set to R.id.label 
            List<T> objects)