如何在单击项目时更改列表视图中的其他项目?

时间:2014-06-04 07:24:16

标签: android listview layout adapter visibility

标题解释它我想解释更多;

我有一个列表视图,所有项目都有橙色背景。简单地说:当点击一个项目时,它将背景变为蓝色。当点击另一个时,最后点击应该是蓝色,之前应该是橙色与其他人。为了实现它,连续一行,我得到2 layouts(blue and orange)并点击,我使蓝色layout(llTicketViewOnClickContainer)可见

不仅仅是背景颜色,还有按钮,图像等,我只想简单解释一下。

现在是下面的代码,它来自我们用于列表视图的适配器

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

    final TicketViewDataObject item=ticketViewObjects.get(position);

    if(convertView==null){
            convertView = inflater.inflate( R.layout.companyviewlibrary_listview_row_ticketview   ,  parent,false);

    }else{
    }


    ticketView=(TicketView) convertView;
    final View clicked=ticketView.findViewById(R.id.llTicketViewOnClickContainer);
    ticketView.prepareTicketView(item);

    if(item.isClicked())
        clicked.setVisibility(View.VISIBLE);
    else
        clicked.setVisibility(View.GONE);
    ticketView.setOnClickListener(new OnClickListener() {
    for (TicketViewDataObject item : ticketViewObjects) {
                item.setClicked(false);
            }
            long timeStart =System.currentTimeMillis();
            refreshList();
            Log.e("TIME_POPULATE",""+(System.currentTimeMillis()-timeStart) );
    }

用于refreshList函数

public void refreshList(){
    this.notifyDataSetChanged();

}

现在我的问题是当我使用notifyDataSetChanged时,它会更改所有数据,清除并updates(tries to get images again which is our problem),再次重新填充。  我只想更改之前点击的项目的llTicketViewOnClickContainer可见性。

4 个答案:

答案 0 :(得分:2)

您正面临ListView回收。请参阅此link获取帮助,但您想要的很简单,默认情况下,您应将ListView背景设置为橙色,并在xml文件中使用android:listSelector="@drawable/blue_color",如:

         <ListView
            android:id="@+id/listView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/orange"
            android:listSelector="@drawable/blue" >
        </ListView>

你完成了:)希望这就是你想要的......

答案 1 :(得分:1)

如果您想更改某些项目背景,只需将背景颜色设置为项目视图&#39; itemView&#39;:

if(item_youwant_change)
{
    itemView.setBackgroundResource(whatyouwant_color);
}

但重要的是要记住所有其他项目&#39; elseView&#39;,您必须设置为默认颜色:

else
{
    elseView.setBackgroundResource(defalut_color);
}

希望这有帮助!

答案 2 :(得分:1)

您可以尝试在适配器中声明变量int selectedRow,然后在getView()方法中根据视图的位置对不同的布局进行充气。然后,只要单击列表项,您就必须更新此变量。

答案 3 :(得分:0)

在drawable中创建一个xml文件,然后:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_pressed="true" 
    android:drawable="@color/your_color" />
   <item android:state_selected="true"
 android:state_pressed="false" 
    android:drawable="@color/your_color" /> 
</selector>

然后在 getView()中写下:

rowView.setBackgroundResource(R.drawable.list_selector_slider_menu);

其中 list_selector_slider_menu 是drawable中.xml文件的名称。