我一直在寻找一个API或一个显示如下所示列表的对象 -
重要的是每个项目都有标题+较小的文字,左/右的复选框,以及在右上角/左侧添加文字的选项(如图片中的日期)
我一直在寻找它,但除了不同的名单之外还没有找到它......
谢谢!
答案 0 :(得分:4)
您必须创建自定义列表视图。这是一个教程: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文件中,我们需要删除&#39; ImageView&#39;在其中,否则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
。您在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();
}
});
如何使列表动态化?我的意思是如何根据用户选择添加新项目/删除项目。
要添加或删除您必须修改songsList的项目,然后更新列表。 假设我们想在songsList中添加一个新项目,我们所要做的就是:
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
,您需要更新列表以再次加载songsList。你这样做是这样的:
list.notifyDataSetChanged();
我希望清除它,我还没有测试过这段代码,但应该一切正常。