Android 将项目附加到列表视图
我想将新项目附加到ListView以实现无休止的滚动Android 将项目附加到列表视图,android,listview,android-listview,Android,Listview,Android Listview,我想将新项目附加到ListView以实现无休止的滚动 private ListAdapter adapter; ArrayList < HashMap < String, String >> listViewList; ... class GetItems extends AsyncTask < String, String, String > { protected String doInBackground(String...args) {
private ListAdapter adapter;
ArrayList < HashMap < String, String >> listViewList;
...
class GetItems extends AsyncTask < String, String, String > {
protected String doInBackground(String...args) {
...
for (int i = 0; i < items.length(); i++) {
...
HashMap < String, String > map = new HashMap < String, String > ();
map.put("name_1", name_1);
map.put("name_2", name_3);
map.put("name_3", name_3);
listViewList.add(map);
}
}
protected void onPostExecute(String file_url) {
adapter = new CustomAdapter(Activity.this, listViewList,
R.layout.single_item, new String[] {}, new int[] {});
setListAdapter(adapter);
}
}
私有列表适配器;
ArrayList>listViewList;
...
类GetItems扩展异步任务{
受保护的字符串doInBackground(字符串…args){
...
对于(int i=0;imap=newhashmap();
地图放置(“名称1”,名称1);
地图放置(“名称2”,名称3);
地图放置(“名称3”,名称3);
添加(地图);
}
}
受保护的void onPostExecute(字符串文件\u url){
adapter=新的CustomAdapter(Activity.this、listViewList、,
R.layout.single_项,新字符串[]{},新int[]{});
setListAdapter(适配器);
}
}
GetItems
类根据您提供的页码获取新项目。我想将新项目附加到onPostExecute
上的现有ListView项目
你知道怎么做吗?实际上你只需要在
onPostExecute
中调用适配器.notifyDataSetChanged
。
但您不应该多次实例化适配器。它应该只做一个,这样整体看起来就像这样
private ListAdapter adapter;
...
void onCreate(){ // assuming this is an activity
adapter = new CustomAdapter(Activity.this, listViewList,
R.layout.single_item, new String[] {}, new int[] {});
setListAdapter(adapter);
}
class GetItems extends AsyncTask<String, String, String> {
...
protected void onPostExecute(String file_url) {
adapter.notifyDataSetChanged();
}
}
私有列表适配器;
...
void onCreate(){//假设这是一个活动
adapter=新的CustomAdapter(Activity.this、listViewList、,
R.layout.single_项,新字符串[]{},新int[]{});
setListAdapter(适配器);
}
类GetItems扩展异步任务{
...
受保护的void onPostExecute(字符串文件\u url){
adapter.notifyDataSetChanged();
}
}
在GitHub上查看此库
ListActivity
,如果您听说它存在,那么它对您正在尝试的操作是无用的
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class DemosAdapter extends BaseAdapter {
public List<DemoItem> listOfItems;
private View v;
private ViewWrapper wrapper;
private Context context;
public DemosAdapter(Context c, List<DemoItem> listOfItems) {
this.context = c;
this.listOfItems = listOfItems;
}
@Override
public int getCount() {
return listOfItems.size();
}
@Override
public DemoItem getItem(int i) {
return listOfItems.get(i);
}
@Override
public long getItemId(int i) {
return 0;
}
public void sort() {
Collections.sort(listOfItems, new Comparator<DemoItem>() {
@Override
public int compare(DemoItem item, DemoItem item2) {
return item.getName().compareTo(item2.getName());
}
});
}
public void addItems(List<DemoItem> listOfFreshItems){
listOfItems.addAll(listOfFreshItems);
notifyDataSetChanged();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
DemoItem itm = listOfItems.get(position);
v = convertView;
if (v == null) {
LayoutInflater inflater = LayoutInflater.from(context);
v = inflater.inflate(R.layout.demo_item, null, false);
wrapper = new ViewWrapper(v);
v.setTag(wrapper);
}
else {
wrapper = (ViewWrapper) v.getTag();
}
wrapper.getTvDemoName().setText(itm.getName());
return v;
}
private class ViewWrapper {
private View base;
private TextView tvDemoName;
public ViewWrapper(View v) {
this.base = v;
}
public TextView getTvDemoName() {
if (tvDemoName == null) {
tvDemoName = (TextView) base.findViewById(R.id.tvDemoName);
}
return tvDemoName;
}
}
}
当你收到新的物品时,打电话就可以了
adapter.addItems(List<DemoItem> newItems);
adapter.addItems(列出新项);
适配器没有notifyDataSetChanged(),只有notify()和notifyAll()。没有,因为ListAdapter只是一个接口。实现取决于您的CustomAdapter。虽然从技术上讲,您可以向列表中添加与适配器关联的项,但如果没有上述实现,更改将不可能生效。我已经看到了它,但它没有显示如何向适配器添加新的数据项。我添加了一些演示代码。你需要根据需要修改它,但你会看到这个想法。
adapter.addItems(List<DemoItem> newItems);