android listview 怎么添加数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android listview 怎么添加数据相关的知识,希望对你有一定的参考价值。
是添加还是填充,填充的话用adapter填充,添加的话,在list.add添加数据后,用adapter.notifyDataSetChanged();来刷新就行 参考技术A ListView list = (ListView) findViewById(R.id.ListView01);//生成动态数组,加入数据
ArrayList<HashMap<String, Object>> listItem = new ArrayList<HashMap<String, Object>>();
for(int i=0;i<10;i++)
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("ItemImage", R.drawable.checked);//图像资源的ID
map.put("ItemTitle", "Level "+i);
map.put("ItemText", "Finished in 1 Min 54 Secs, 70 Moves! ");
listItem.add(map);
//生成适配器的Item和动态数组对应的元素
SimpleAdapter listItemAdapter = new SimpleAdapter(this,listItem,//数据源
R.layout.list_items,//ListItem的XML实现
//动态数组与ImageItem对应的子项
new String[] "ItemImage","ItemTitle", "ItemText",
//ImageItem的XML文件里面的一个ImageView,两个TextView ID
new int[] R.id.ItemImage,R.id.ItemTitle,R.id.ItemText
);
//添加并且显示
list.setAdapter(listItemAdapter);本回答被提问者和网友采纳 参考技术B 如果不知道的话,请先百度一下。。。这些东西很多人都有写过帖子。。。
http://www.cnblogs.com/allin/archive/2010/05/11/1732200.html
帮你找了一个。
android中每行中带有添加和删除按钮的ListView
【中文标题】android中每行中带有添加和删除按钮的ListView【英文标题】:ListView with Add and Delete Buttons in each Row in android 【发布时间】:2013-07-05 17:47:06 【问题描述】:我正在开发一个 android 应用程序,在其中创建了一个 ListView。我必须在 ListView 中的每一行添加 2 个按钮。这两个按钮是添加和删除。当用户选择其中一个按钮时,应该采取一些行动。我该怎么做?
【问题讨论】:
使用自定义listview布局,在item view中添加两个按钮,并在对应的点击事件上写action 【参考方案1】:您首先需要创建一个自定义布局 xml,它将代表您列表中的单个项目。您将把您的两个按钮与您想要从列表中显示的任何其他项目一起添加到此布局中。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_ >
<TextView
android:id="@+id/list_item_string"
android:layout_
android:layout_
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:paddingLeft="8dp"
android:textSize="18sp"
android:textStyle="bold" />
<Button
android:id="@+id/delete_btn"
android:layout_
android:layout_
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="5dp"
android:text="Delete" />
<Button
android:id="@+id/add_btn"
android:layout_
android:layout_
android:layout_toLeftOf="@id/delete_btn"
android:layout_centerVertical="true"
android:layout_marginRight="10dp"
android:text="Add" />
</RelativeLayout>
接下来,您将需要创建一个自定义 ArrayAdapter 类,您将使用它来扩充您的 xml 布局,以及处理您的按钮和点击事件。
public class MyCustomAdapter extends BaseAdapter implements ListAdapter
private ArrayList<String> list = new ArrayList<String>();
private Context context;
public MyCustomAdapter(ArrayList<String> list, Context context)
this.list = list;
this.context = context;
@Override
public int getCount()
return list.size();
@Override
public Object getItem(int pos)
return list.get(pos);
@Override
public long getItemId(int pos)
return list.get(pos).getId();
//just return 0 if your list items do not have an Id variable.
@Override
public View getView(final int position, View convertView, ViewGroup parent)
View view = convertView;
if (view == null)
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.my_custom_list_layout, null);
//Handle TextView and display string from your list
TextView listItemText = (TextView)view.findViewById(R.id.list_item_string);
listItemText.setText(list.get(position));
//Handle buttons and add onClickListeners
Button deleteBtn = (Button)view.findViewById(R.id.delete_btn);
Button addBtn = (Button)view.findViewById(R.id.add_btn);
deleteBtn.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
//do something
list.remove(position); //or some other task
notifyDataSetChanged();
);
addBtn.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
//do something
notifyDataSetChanged();
);
return view;
最后,在您的活动中,您可以实例化您的自定义 ArrayAdapter 类并将其设置为您的列表视图。
public class MyActivity extends Activity
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_activity);
//generate list
ArrayList<String> list = new ArrayList<String>();
list.add("item1");
list.add("item2");
//instantiate custom adapter
MyCustomAdapter adapter = new MyCustomAdapter(list, this);
//handle listview and assign adapter
ListView lView = (ListView)findViewById(R.id.my_listview);
lView.setAdapter(adapter);
希望这会有所帮助!
【讨论】:
如果我想使用 CursorLoader 怎么办? return list.get(pos).getId();---无法解析方法'getId()' @TahaKörkem 只需将“return list.get(pos).getId()”替换为“return 0”即可。如果您的列表项没有 Id 属性,则 getId() 方法没有用。 谢谢,这很有帮助,但有一个小问题。我似乎无法在那些匿名类中使用位置变量,它说它必须是最终的。 无法理解..我如何在按钮单击时开始一些操作,这不会与我的列表连接...所以我需要实际相同,但有一些不同。我需要开始下载文件,单击按钮并显示进度....完成后我需要将按钮升级到活动状态(或替换进度条)然后我将开始通过蓝牙将文件加载到我的设备。所以我需要发送的不仅仅是列表......因为布局类型取决于某个值(我需要数组 [int] [字符串],或者类似的东西,我想)......我是 Android 和 Java 的新手,所以这一切对我来说都很难)【参考方案2】:删除按钮点击事件
public void delete(View v)
ListView listview1;
ArrayList<E> datalist;
final int position = listview1.getPositionForView((View) v.getParent());
datalist.remove(position);
myAdapter.notifyDataSetChanged();
【讨论】:
【参考方案3】:public class UserCustomAdapter extends ArrayAdapter<User>
Context context;
int layoutResourceId;
ArrayList<User> data = new ArrayList<User>();
public UserCustomAdapter(Context context, int layoutResourceId,
ArrayList<User> data)
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
@Override
public View getView(int position, View convertView, ViewGroup parent)
View row = convertView;
UserHolder holder = null;
if (row == null)
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new UserHolder();
holder.textName = (TextView) row.findViewById(R.id.textView1);
holder.textAddress = (TextView) row.findViewById(R.id.textView2);
holder.textLocation = (TextView) row.findViewById(R.id.textView3);
holder.btnEdit = (Button) row.findViewById(R.id.button1);
holder.btnDelete = (Button) row.findViewById(R.id.button2);
row.setTag(holder);
else
holder = (UserHolder) row.getTag();
User user = data.get(position);
holder.textName.setText(user.getName());
holder.textAddress.setText(user.getAddress());
holder.textLocation.setText(user.getLocation());
holder.btnEdit.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
// TODO Auto-generated method stub
Log.i("Edit Button Clicked", "**********");
Toast.makeText(context, "Edit button Clicked",
Toast.LENGTH_LONG).show();
);
holder.btnDelete.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
// TODO Auto-generated method stub
Log.i("Delete Button Clicked", "**********");
Toast.makeText(context, "Delete button Clicked",
Toast.LENGTH_LONG).show();
);
return row;
static class UserHolder
TextView textName;
TextView textAddress;
TextView textLocation;
Button btnEdit;
Button btnDelete;
嘿,请给look here-
我的博客上有同样的答案..
【讨论】:
混乱存在。我的 ListView 准备好了。我只需要在每一行中添加两个按钮。我没有清楚地了解您的代码。 只需像其他 textview 一样在 row_layout.xml 中放置两个按钮并使用它们的 id 调用它们。然后像 me-holder.btnDelete.setOnClickListener(new OnClickListener() @Override public void onClick(View v) // TODO 自动生成的方法 stub Log.i("Delete Button Clicked", "**********"); Toast.makeText(context, "Delete button Clicked", Toast.LENGTH_LONG).show(); ); 好吧,我建议只是复制粘贴所有代码并制作一个演示应用程序,然后您就可以轻松理解代码的工作方式.. 现在我必须根据需要对我的 GUI 进行更改。我必须在列表视图的底部添加两个按钮。 你对此有什么想法吗?以上是关于android listview 怎么添加数据的主要内容,如果未能解决你的问题,请参考以下文章
Android怎么在listview中的item动态添加控件。比如我不清楚究竟有几张图片需要解析数据后才知道