Java Android从JSON数组添加ListView项
我有一个活动,但有三个布局。ListView是登录后显示的布局的一部分。这就是为什么我不能在创建时设置ArrayAdapter,因为我的ListView尚未初始化。我试着遵循教程,但我无法重现这些步骤。在本教程中,作者在创建时完成了所有操作 我试着这样做:Java Android从JSON数组添加ListView项,java,android,android-listview,android-arrayadapter,Java,Android,Android Listview,Android Arrayadapter,我有一个活动,但有三个布局。ListView是登录后显示的布局的一部分。这就是为什么我不能在创建时设置ArrayAdapter,因为我的ListView尚未初始化。我试着遵循教程,但我无法重现这些步骤。在本教程中,作者在创建时完成了所有操作 我试着这样做: ArrayList<String> listItems=new ArrayList<String>(); ArrayAdapter<String> adapter; ... public cla
ArrayList<String> listItems=new ArrayList<String>();
ArrayAdapter<String> adapter;
...
public class getcontacts extends AsyncTask<Void, Void, Boolean> {
@Override
protected Boolean doInBackground(Void... params) {
...HERE I AM FETCHING DATA...
listItems.add(json_data.getString("login") + " " + derp);
}
@Override
protected void onPostExecute(final Boolean success) {
getc = null;
ac = new addcontacts();
ac.execute(true);
ArrayList listItems=new ArrayList();
阵列适配器;
...
公共类getcontacts扩展异步任务{
@凌驾
受保护的布尔doInBackground(Void…params){
…这里我正在获取数据。。。
add(json_data.getString(“login”)+“”+derp);
}
@凌驾
受保护的void onPostExecute(最终布尔值成功){
getc=null;
ac=新添加的触点();
ac.execute(真);
下面是addcontacts类的代码:
public class addcontacts extends ListActivity {
protected void onCreate() {
adapter=new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
listItems);
setListAdapter(adapter);
adapter.notifyDataSetChanged();
}
protected void execute(final Boolean success) {
done = true;
}
}
public类addcontacts扩展ListActivity{
受保护的void onCreate(){
适配器=新阵列适配器(此,
android.R.layout.simple\u list\u item\u 1,
清单项目);
setListAdapter(适配器);
adapter.notifyDataSetChanged();
}
受保护的void执行(最终布尔值成功){
完成=正确;
}
}
布局如下:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="188dp"
android:layout_weight="0.53"
android:text="Fetching contact list" />
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="106dp" >
</ListView>
</LinearLayout>
ListView不包含任何内容。我在调试器中签入listItems包含所有项,因此适配器出现问题。我建议您采用以下方法:
活动中
使用空列表初始化列表视图
和适配器
BaseAdapter
的子类以获得对它的更多控制适配器的构造函数传递适配器
并列出
异步任务
子类中传递适配器
和列表
doInBackground()
方法中,执行从服务器和
将每个项目添加到列表中
列表中的每个项目
,请调用
publishProgress()
和在onProgressUpdate()中调用
yourAdapter.notifyDataSetChanged()
onPostExecute()
方法调用中
yourAdapter.notifyDataSetChanged()
您已经完成了。您没有像以前那样通过显式Contstructor实例化活动。您还应该注意您正在编写的,
onCreate()
需要获得一个捆绑包作为参数。使用@Override
注释,这将使类似操作更容易。此外,请使用适当的命名约定,并向我们展示如何设置每个类。如果AsyncTask和ListActivity都是同一文件的一部分,请不要将它们分开。下面是完整的代码:这是一个非常类似的示例,其中包含数据从XML解析并动态添加到列表中并进行更新。似乎很复杂。还有其他更简单的方法吗?是的,但您不需要处理图像和内存。您只需查看如何解析和更新适配器,就可以了。好的,谢谢。我会研究它,但我想这将花费我几天的时间。x.x