2013-12-17 2 views
0

항목 목록이있는 응용 프로그램을 개발 중이며 목록보기에서 특정 항목을 선택하면 선택한 전체 행의 배경색을 변경하고 싶지만이 모든 행을 구현할 때 배경색이 변경되었습니다. 제발 누군가 도와주세요. Advace에 감사드립니다. 내 Adaptor.xml은 다음과 같습니다.Listview의 특정 행 배경 변경

public class Adaptor_ListItem extends ArrayAdapter<MyItem> { 
     public Context mContext; 
     public ArrayList<MyItem> listItem; 
     public LayoutInflater inflater; 
     public int position1=-1; 

     public Adaptor_ListItem(Context context, int resource, List<MyItem> list, 
       int selectedPos) { 
      super(context, resource, list); 
      // TODO Auto-generated constructor stub 
      mContext = context; 
      listItem = (ArrayList<MyItem>) list; 
      inflater = (LayoutInflater) mContext 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      position1 = selectedPos; 
     } // method ends 

     public View getView(int pos, View convertView, ViewGroup parent) { 
      View holder = convertView; 
      if (holder == null) { 
       holder = inflater.inflate(R.layout.adaptor_itemlist, null); 
      } 
      if (listItem.size() != 0) { 

       TextView txtName = (TextView) holder 
         .findViewById(R.id.ListItem_txtName); 
       TextView txtDays = (TextView) holder 
         .findViewById(R.id.ListItem_txtDays); 
       TextView txtRecurring = (TextView) holder 
         .findViewById(R.id.ListItem_txtRecuring); 
       MyItem objItem = listItem.get(pos); 
       if (objItem != null) { 
        String strName = objItem.itemName; 
        String strRecurring = objItem.recurring + ""; 
        String strDays = objItem.days; 
        int itemId = objItem.itemId; 
        // for checking which item has notified 
        if ((pos== position1) && holder!=null) { 
         LinearLayout linearLayout = (LinearLayout) holder 
           .findViewById(R.id.linearListItem); 
         txtName.setBackgroundColor(Color.RED); 
         txtDays.setBackgroundColor(Color.RED); 
         txtRecurring.setBackgroundColor(Color.RED); 
         System.out.println("Adaptor_ListItem.getView()//// method block"); 
        } 
        if (strDays == null) { 
         txtName.setText(strName); 
         txtDays.setText("0 Days"); 
         txtRecurring.setText(strRecurring + ""); 
        } else { 
         txtName.setText(strName); 
         txtDays.setText(strDays + " Days"); 
         txtRecurring.setText(strRecurring + ""); 

        } 

       } 
      } 
      return holder; 
     }// method ends 
    } // final class ends 

답변

0

adaptor_itemlist.xml 파일의 기본 레이아웃 배경을 언급하십시오. adapter_itemlist.xml

사용 울부 짖는 코드 메인 레이아웃의 배경이 파일을 적용

item_selector.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

<item android:state_selected="true" android:drawable="@color/red"></item> 
<item android:state_selected="false" android:drawable="@android:color/white"></item> 

</selector> 

:

linearLayout.setSelected(true); 

대신

배경에 대한 선택기를 쓰기 :

txtName.setBackgroundColor(Color.RED); 
txtDays.setBackgroundColor(Color.RED); 
txtRecurring.setBackgroundColor(Color.RED); 
+0

실제로 이것은 필요하지 않습니다. –

+0

어디에서 변경 되나요? onItemClickListener()를 업데이트 할 수 있습니다. – user543

+0

Shayan pourvatan : 사실 나는 listif의 특정 항목에 대한 알림을 추가하고 있습니다. notifcation이 수신되면이 활동을 열 때이 목록보기가있는 활동이 의도를 통해 열리고 선택된 행의 위치가이 의도에 추가됩니다.이 활동이 열리면이 위치를 얻고 전달합니다. 그것은 (pos == position1)면,이 조건에 의해 뭐하는거야이 행에 몇 가지 배경색을 설정하는 어댑터 생성자에 있지만, 모든 행의 배경색을 변경, 내 배경은 단지 배경색을 변경해야합니다 내 문제입니다 선택된 행. –

0

사용자 정의 어댑터에서 getview에이 행을 추가하십시오. 대신 코드의 코드를 다음

listTextView.setTextColor(Color.parseColor("#aaaaaa")); 
+0

배경색이 제 코드에서 바뀌고 있지만 단일 행이 아니라 모든 행이 바뀌고 있습니다. 내 실제 문제입니다. –

+0

모든 행에 다른 bg 색이 있다고 말하고 있습니다. 맞습니까? – dipali

+0

색상의 배열을 가져 와서 해당 위치의 맞춤형 어댑터베이스로 전달하십시오. – dipali

0

사용 :

 public View getView(int pos, View convertView, ViewGroup parent) { 
     View v = convertView; 

     ViewHolder Holder; 

    if (v == null) { 
      v = inflater.inflate(R.layout.adaptor_itemlist, null); 

      Holder = new ViewHolder(); 

      Holder.txtName = (TextView) v 
        .findViewById(R.id.ListItem_txtName); 
      Holder.txtDays = (TextView) v 
        .findViewById(R.id.ListItem_txtDays); 
      Holder.txtRecurring = (TextView) v 
        .findViewById(R.id.ListItem_txtRecuring); 
      MyItem objItem = listItem.get(pos); 
      v.setTag(Holder); 
      } 
     else 
     holder=(ViewHolder)v.getTag(); 

     if (objItem != null) { 
       String strName = objItem.itemName; 
       String strRecurring = objItem.recurring + ""; 
       String strDays = objItem.days; 
       int itemId = objItem.itemId; 
       // for checking which item has notified 
       if ((pos== position1)) { 
        LinearLayout linearLayout = (LinearLayout) v 
          .findViewById(R.id.linearListItem); 
        Holder.txtName.setBackgroundColor(Color.RED); 
        Holder.txtDays.setBackgroundColor(Color.RED); 
        Holder.txtRecurring.setBackgroundColor(Color.RED); 
        System.out.println("Adaptor_ListItem.getView()//// method block"); 
       } 
     else 
     { 
        // set Default Value 
       } 
       if (strDays.equals(null)) { 
        Holder.txtName.setText(strName); 
        Holder.txtDays.setText("0 Days"); 
        Holder.txtRecurring.setText(strRecurring + ""); 
       } else { 
        Holder.txtName.setText(strName); 
        Holder.txtDays.setText(strDays + " Days"); 
        Holder.txtRecurring.setText(strRecurring + ""); 

       } 


     } 
     return v; 
    }// method ends 
} // final class ends 

와 ViewHolder 클래스는 다음과 같습니다 어댑터의 당신의 getView 방법에

public static class ViewHolder() 
{ 
    public TextView txtName , txtDays, txtRecurring; 
    } 
+0

무엇입니까? 오류?무슨 말을하는거야? –

0
int [] arrayColors={Color.GREEN,Color.BLUE,Color.Red} 

이 라인 아래 전화.

yourView.setBackgroundColor(Color.parseColor(arrayColors[pos])); 
+0

조건.이 코드가 직접적으로 적용된다면 넣지 마십시오 – dipali

+0

'arrayColors'에서'IndexOut'을 얻지 못하겠습니까? 당신은 당신의 배열에 단지 3 개의 아이템을 넣겠지 만'pos'는 3보다 클 수 있습니다. –

+0

이것은 요구 사항에 기초합니다 howmany color는 배열에 있습니다 ..이게 문제가 아니에요 ... 누군가 내 애플 리케이션에 필요한 배열의 크기를 이해할 수 있습니다 .? – dipali

0

당신은 원래의 색으로 배경색을 설정해야합니다 (POS! = position1) .. 또는 경우 (POS = position1) 문의 다른 절을. 지금은 목록 항목을 빨간색으로 설정하면 다른 행으로 재활용되지만 새로운 getView() 호출에서는 설정되지 않았기 때문에 빨간색으로 유지됩니다.

   int feedbackColor = Color.WHITE; // or whatever your base color is 
       if ((pos== position1) && holder!=null) { 
        LinearLayout linearLayout = (LinearLayout) holder 
          .findViewById(R.id.linearListItem); 
        feedbackColor = Color.RED; 

       } 
       txtName.setBackgroundColor(feedbackColor); 
       txtDays.setBackgroundColor(feedbackColor); 
       txtRecurring.setBackgroundColor(feedbackColor);