2016-03-03 205 views
0

我在我的项目中使用自定义列表视图。 当我点击ListView中的项目时,该项目应该被高亮显示。设置突出显示自定义列表视图中的选定项目android

对于这种使用代码listadapter

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    View row = convertView; 
    SubCategoryHolder holder = null; 

     if (row == null) { 
      LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
      row = inflater.inflate(layoutResourceId, parent, false); 
      holder = new SubCategoryHolder(); 
      holder.dishName = (TextView) row.findViewById(R.id.subcat_name); 
      row.setTag(holder); 
     }else { 
       holder = (SubCategoryHolder) row.getTag(); 
     } 
     final SubcategoryGetSet sub = objects.get(position); 
     holder.dishName.setText(sub.getDishName()); 
     holder.dishName.setTextColor(Color.parseColor("#000000")); 


     row.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      v.setSelected(true); 
      v.setBackgroundColor(Color.parseColor("#0000e0")); 
     } 
    }); 

    return row; 
} 

当我点击项目,然后它被加亮后为蓝色。 问题是,当我点击另一个项目时,它仍然是高光。 如何删除先前选择的背景色?

+0

Hello Nilesh Patil,Plese正确答案,如果你发现它有用... – AmeeJoshi

+0

我设置背景,当点击。但问题是,当我点击另一个项目时,先前的项目保持突出显示。 –

回答

1

您可以更改所选列表视图项目的颜色。以下代码可能会有帮助

首先把这个在您的列表视图

机器人:listSelector = “@绘制/ list_selector”

然后在绘制创建XML文件来控制diferent状态

@绘制/ list_selector

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:drawable="@drawable/list_item_bg_normal" android:state_activated="false"/> 
<item android:drawable="@drawable/list_item_bg_pressed" android:state_pressed="true"/> 
<item android:drawable="@drawable/list_item_bg_pressed" android:state_activated="true"/> 
</selector> 

@ drawable/list_item_bg_normal

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle"> 
<gradient 
    android:startColor="@color/list_background" 
    android:endColor="@color/list_background" 
    android:angle="90" /> 
</shape> 

@绘制/ list_item_bg_pressed

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <gradient 
     android:startColor="@color/list_background_pressed" 
     android:endColor="@color/list_background_pressed" 
     android:angle="90" /> 
</shape> 

在你的ListView选择

listView.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position,long arg3) { 
      view.setSelected(true); 
      ... 
     } 
    } 

不要忘记添加list_background_pressed和list_background你的价值观/ color.xml或只是在每个手动设置颜色文件。

而且我相信,当您使用setSelection(int pos)时,它会自动使用您设置为选定的布局。

0

试试这个,希望它有帮助。

 Integer lastSelectedItemPos;//to store last selected view position 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      View row = convertView; 
      SubCategoryHolder holder; 
      if (row == null) { 
       holder = new SubCategoryHolder(); 
       //your inflating stuff and find views 
       //setOnClickListener for your layout 
       holder.layout.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 
         int pos = (int) view.getTag(); 
         final SubcategoryGetSet sub = objects.get(pos); 
         sub.setSelected(true);//new item selected 
         if (lastSelectedItemPos != null) { 
          sub = objects.get(lastSelectedItemPos); 
          sub.setSelected(false);// dis select previous one 
         } 
         lastSelectedItemPos = pos; 
         notifyDataSetChanged();//refresh views 
        } 
       }); 
       row.setTag(holder); 
      } else { 
       holder = (SubCategoryHolder) row.getTag(); 
      } 

      holder.layout.setTag(position);//set position as tag to your layout 
      final SubcategoryGetSet sub = objects.get(pos); 
      //your other stuff 

      if (sub.isSelected()) 
       row.setBackgroundColor(Color.RED);//selected color 
      else 
       row.setBackgroundColor(Color.GRAY);//not selected color 

      return row; 

     } 

     class SubCategoryHolder{ 
      //other views 
      LinearLayout layout; 
     } 
    }; 

需要下SubcategoryGetSet

class SubcategoryGetSet{ 
    //your other objects, getters and setters 
    boolean selected; 
    public boolean isSelected() { return selected; } 
    public void setSelected(boolean selected) { this.selected = selected; } 
} 

创建一个额外的领域,你需要添加更多的额外的视图根视图

<!-- root view (whatever your view is I am using LL)--> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:orientation="horizontal"> 
    <!-- add this view as sub child of root view and set listener for this --> 
    <LinearLayout 
     android:id="@+id/layout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <!--your other views/adapter design goes here --> 

    </LinearLayout> 

</LinearLayout> 

Happy_Coding的孩子;

相关问题