2016-02-04 97 views
1

每当用户按下列表视图时,它都会将其背景颜色更改为红色。但是,当我按另一个项目时,旧项目仍保留红色的背景颜色。如何对其进行编辑,使只有点击的项目具有更改的背景颜色。如何更改Android Studio中ListView中单击项目的背景颜色?

lvContact.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

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

     nameSelected = contactHolderArrayList.get(position).name; 
     phoneSelected = contactHolderArrayList.get(position).phone; 

     //Anything 
    } 
}); 
+0

参见此http://计算器.com/questions/16976431/change-background-color-of-selected-item-on-a-listview和http://stackoverflow.com/questions/16189651/android-listview-selected-item-stay-highlighted – Rohit5k2

+0

你需要将适配器中的其他视图设置为其原始背景颜色,同时将选定的一个设置为红色,但由于每次点击都需要操作多个列表项,因此您可能需要令状e您自己的自定义Base Adapter来管理您的视图。 – NoChinDeluxe

回答

-1

您需要在视图的ListView适配器内申请onTouchListener则需要设置Down操作,旧色后续行动的新颜色

public View getView(int position, View convertView, ViewGroup parent) 
{ 
     view.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       if(event.getAction() == MotionEvent.ACTION_DOWN){ 
        // apply new color 
       } 
       if(event.getAction() == MotionEvent.ACTION_UP){ 
        // apply old color 
       } 
       return false; 
      } 
     }); 
     return view; 
} 
0

我只是实现了一个简单的计数器来跟踪前页和当前位置,它的工作原理!如有任何错误,请评论。我在OnCreate中初始化计数器为0,并递增每时间列表项被按下,然后包含以下代码中onitemclicklistener

lvContact.setOnItemClickListener(新AdapterView.OnItemClickListener(){

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

      if(counter==0) { 
       prevPosition = position; 
      } 
      else if (counter ==1) { 
       currentPosition = position; 
      } 
      else { 
       prevPosition = currentPosition; 
       currentPosition = position; 
      } 
      lvContact.getChildAt(prevPosition).setBackgroundColor(Color.TRANSPARENT); 
      view.setBackgroundColor(Color.RED); 
      counter++; 
相关问题