我一直在寻找一个 API 或一个对象,它显示如下所示的列表 -
重要的是每个项目都有一个标题+较小的文本,左侧/右侧的复选框,以及在右上角/左侧添加文本的选项(如图片中的日期)
我一直在寻找它,但还没有找到它,除了不同的列表......
谢谢!
我一直在寻找一个 API 或一个对象,它显示如下所示的列表 -
重要的是每个项目都有一个标题+较小的文本,左侧/右侧的复选框,以及在右上角/左侧添加文本的选项(如图片中的日期)
我一直在寻找它,但还没有找到它,除了不同的列表......
谢谢!
您必须创建一个自定义列表视图。这是给你的教程:http ://www.androidhive.info/2012/02/android-custom-listview-with-image-and-text/
编辑 回答您在评论中的问题:
如何添加复选框而不是图片?
您需要编辑 list_row.xml 文件以将 ImageView 更改为 CheckBox。这是 ImageView xml 代码:
<ImageView
android:id="@+id/list_image"
android:layout_width="50dip"
android:layout_height="50dip"
android:src="@drawable/rihanna"/>
但是我们想要一个复选框,不是吗。让我们更改该块,使其成为 CheckBox:
<CheckBox
android:id="@+id/cb_list"
android:layout_width="50dip"
android:layout_height="50dip"
android:text="This is a checkbox"/>
然后在 LazyAdapter.java 文件中,我们需要删除其中包含“ImageView”的位,否则 LazyAdapter 将尝试对不存在的 ImageView 进行处理。这是更新后的类(已删除的位已注释掉):
public class LazyAdapter extends BaseAdapter {
private Activity activity;
private ArrayList<HashMap<String, String>> data;
private static LayoutInflater inflater=null;
//public ImageLoader imageLoader;
public LazyAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
activity = a;
data=d;
inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//imageLoader=new ImageLoader(activity.getApplicationContext());
}
public int getCount() {
return data.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
View vi=convertView;
if(convertView==null)
vi = inflater.inflate(R.layout.list_row, null);
TextView title = (TextView)vi.findViewById(R.id.title); // title
TextView artist = (TextView)vi.findViewById(R.id.artist); // artist name
TextView duration = (TextView)vi.findViewById(R.id.duration); // duration
//ImageView thumb_image=(ImageView)vi.findViewById(R.id.list_image); // thumb image
HashMap<String, String> song = new HashMap<String, String>();
song = data.get(position);
// Setting all values in listview
title.setText(song.get(CustomizedListView.KEY_TITLE));
artist.setText(song.get(CustomizedListView.KEY_ARTIST));
duration.setText(song.get(CustomizedListView.KEY_DURATION));
//imageLoader.DisplayImage(song.get(CustomizedListView.KEY_THUMB_URL), thumb_image);
return vi;
}
}
当一个被点击时,我怎样才能得到他在列表中的位置,以便我能够影响该项目?
单击列表项时,OnItemClickListener
会触发 a。你OnItemClickListener
在你的CustomizedListView
活动中定义了你的。看看底部附近,它看起来像这样:
// Click event for single list row
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
}
});
假设我们想在单击列表时显示一个弹出窗口(在 Android 上称为 Toast),我们会这样做:
// Click event for single list row
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(CustomizedListView.this, "List item " + position + "clicked", Toast.LENGTH_SHORT).show();
}
});
如何使列表动态化?我的意思是如何根据用户的选择添加新项目/删除项目。
要添加或删除项目,您必须修改歌曲列表,然后更新列表。假设我们想在歌曲列表中添加一个新项目,我们所要做的就是:
HashMap<String, String> map = new HashMap<String, String>();
map.put(KEY_ID, "0");
map.put(KEY_TITLE, "Title here");
map.put(KEY_ARTIST, "Artist here");
map.put(KEY_DURATION, "4:08");
map.put(KEY_THUMB_URL, "http://www.moveoneinc.com/blog/wp-content/uploads/2011/12/Dog-2.jpg");
// adding HashList to ArrayList
songsList.add(map);
要删除一首歌曲,只需执行以下操作:
songsList.remove(3); //Where 3 means the second element in the list
编辑songsList
完后,您需要更新列表以再次加载歌曲列表。你这样做:
list.notifyDataSetChanged();
我希望清除它,我没有测试过这段代码,但应该都可以工作。