我正在MainActivity
中构建ArrayAdapter
,其中包含用户列表。我使用以下内容初始化ListView
和adapter = 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)
显示为空白。关于什么可能出错的任何想法?
答案 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
对象
答案 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)