0

我一直在寻找一个 API 或一个对象,它显示如下所示的列表 -
列表

重要的是每个项目都有一个标题+较小的文本,左侧/右侧的复选框,以及在右上角/左侧添加文本的选项(如图片中的日期)

我一直在寻找它,但还没有找到它,除了不同的列表......

谢谢!

4

1 回答 1

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 文件中,我们需要删除其中包含“ImageView”的位,否则 LazyAdapter 将尝试对不存在的 ImageView 进行处理。这是更新后的类(已删除的位已注释掉):

public class LazyAdapter extends BaseAdapter {

    private Activity activity;
    private ArrayList&lt;HashMap&lt;String, String&gt;&gt; data;
    private static LayoutInflater inflater=null;
    //public ImageLoader imageLoader; 

    public LazyAdapter(Activity a, ArrayList&lt;HashMap&lt;String, String&gt;&gt; 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&lt;String, String&gt; song = new HashMap&lt;String, String&gt;();
        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&lt;?&gt; parent, View view, int position, long id) {

    }
});

假设我们想在单击列表时显示一个弹出窗口(在 Android 上称为 Toast),我们会这样做:

// Click event for single list row
list.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView&lt;?&gt; 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();

我希望清除它,我没有测试过这段代码,但应该都可以工作。

于 2012-07-26T15:05:03.853 回答