列表的API /对象

时间:2012-07-26 15:04:01

标签: android

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

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

我一直在寻找它,但除了不同的名单之外还没有找到它......

谢谢!

1 个答案:

答案 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&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。您在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();
    }
});

如何使列表动态化?我的意思是如何根据用户选择添加新项目/删除项目。

要添加或删除您必须修改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();

我希望清除它,我还没有测试过这段代码,但应该一切正常。