Android - 保持点击ListView(和内存)中突出显示的项目

时间:2015-02-14 07:25:38

标签: android listview android-listview

我有一个应用程序,我正在访问RESt Web服务并在listview(ListFrragment)中显示请求。它本质上是一个文章列表。我想要实现的是当用户点击listview中的项目(在ViewPager中展开文章)时,会突出显示(表示文章已被阅读)。下次用户重新加载此列表视图时,所有已读取的项目仍会突出显示。

我已经创建了一个布尔变量" read"对于每篇文章。当用户点击此项目时,"阅读"变量被赋值为TRUE。然后在自定义适配器(extends arrayAdpater)中,我在getView中为其"读取"的文章分配背景颜色(在本例中为绿色)。值为TRUE。这确实有效,但我发现当我开始在列表视图中向上和向下滚动而没有实际点击它时,列表视图中的其他项目也随机变为绿色。我真的卡住了,因为我不明白发生了什么。有人可以建议吗?

 public void onListItemClick(ListView l, View v, int postion, long id) {
    Article a = ((toReadListAdapter) getListAdapter()).getItem(postion);

    // set read attribute to TRUE
    a.setRead(true);
    saveToReadList(toReadList);

   // Open via ViewPager
   Intent i = new Intent(getActivity(), ReadingList_PagerActivity.class);
   startActivity(i);

客户适配器:

 // Defining custom adapter
private class toReadListAdapter extends ArrayAdapter<Article> {
    public toReadListAdapter(ArrayList<Article> listToRead) {
        super(getActivity(), 0, listToRead);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        if (convertView == null) {
            convertView = getActivity().getLayoutInflater().inflate(R.layout.new_articlelistfragment, null);
        }

        Article en = getItem(position);

        Log.d(TAG, "Showing articles: " + position + "/ pmid: " + en.getId());
        Log.e(TAG, "isRead value: " + en.isRead());

        if(en.isRead() == true){
            convertView.setBackgroundColor(Color.parseColor("#C8E6C9"));
        }

        ......
        return convertView;

2 个答案:

答案 0 :(得分:0)

在getView中

public View getView(int position, View convertView, ViewGroup parent) {

    if (convertView == null) {
        convertView = getActivity().getLayoutInflater().inflate(R.layout.new_articlelistfragment, null);
    }

    Article en = getItem(position);

    if(en.isRead() == true){
        convertView.setBackgroundColor(Color.parseColor("#C8E6C9"));
    }
    else{
    // put the default color
    convertView.setBackgroundColor( );
    }

    ......
    return convertView;
}

答案 1 :(得分:0)

您没有应用默认颜色。在get view方法中添加else语句