2014-07-14 3 views
0

아래 코드를 사용하여 listview의 선택된 항목을 설정합니다. 규칙은 하나만 색칠해야합니다. 하지만 아래 코드를 사용하면 2 개의보기를 선택하면 모두 색상이됩니다. 다른 뷰 (view)를 클릭했을 때 다른 뷰 (view)를 클릭 할 때 다른 뷰 (view)를 선택하고 다른 뷰 (view)를 선택하면 다른 색 (이 경우 그린)을 설정할 수 있습니다. 다른 해결책이 있다면 알려주십시오.setOnItemClickListener에서 listview의 모든 뷰 가져 오기

enter image description here

lv = (ListView) view.findViewById(R.id.listf); 
    lv.setAdapter(text![enter image description here][1]Adapter); 
    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      TextView v = (TextView) view.findViewById(R.id.template_text); 
      view.setBackgroundColor(Color.GREEN); 
     } 
    }); 
+1

맞춤 어댑터를 사용하고 있습니까? – Pr38y

+0

예 .. 맞춤 어댑터를 사용하고 있습니다. 텍스트 뷰와 버튼이 있습니다. – Psypher

답변

1

녹색 ANDD 이전에 현재 선택된 텍스트 뷰의 색상을 변경 유지 아래의 방법으로 문제를 해결했습니다 : 선택한 목록 항목 만 빨간색으로 설정하고 다른 모든 항목은 녹색으로 설정하는 루프를 만들었습니다. 이렇게하면 하나의 목록 항목 만 선택시 채색됩니다.

lv = (ListView) view.findViewById(R.id.listf); 
lv.setAdapter(Adapter); 
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    for (int i = 0; i < 3; i++) 
    { 
     if (position == i) 
     { 
      parent.getChildAt(i).setBackgroundColor(Color.RED); 
     } 
     else 
     { 
      parent.getChildAt(i).setBackgroundColor(getResources().getColor(R.color.Dark_Green); 
     } 
    } 
    TextView v = (TextView) view.findViewById(R.id.template_text); 
    view.setBackgroundColor(Color.GREEN); 
    } 
}); 
0

당신이 어댑터 코드를 변경할 수 없습니다 말했듯이, 당신이 솔루션을 선호 할 수 있습니다 2.

해결 방법 1 : 만들기 하나의 변수 int selectedPosition 및 어댑터 클래스의 방법 setSelected

int selectedPosition = -1; 
public void setSelected(int position) 
{ 
    selectedPosition = position; 
    notifyDatasetChanged(); 
} 

편집 getView() 전자 어댑터 클래스와 다음을 포함 코드

if(selectedPosition==position) 
{ 
    templateTextView.setBackgroundColor(Color.GREEN); 
} 
else templateTextView.setBackgroundColor(Color.BLUE);// default textView color 

해결 방법 2 : 이전에 선택한 텍스트 뷰의 참조뿐만 아니라 때마다 파란색

TextView previousSelected = null; 
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     if(previousSelected!=null) 
      previousSelected.setBackgroundColor(Color.BLUE); 
     TextView v = (TextView) view.findViewById(R.id.template_text); 
     view.setBackgroundColor(Color.GREEN); 
     previousSelected = v; 
    } 
}); 
+0

몇 가지 이유 때문에 어댑터 클래스에 넣을 수 없습니다. 내가 어댑터 클래스 외부에있는 Onitemclicklistener 자체에 넣어야합니다. – Psypher

+0

조금 이유를 설명 할 수있는 이유는 무엇입니까? – Pr38y

+1

Pr38y는이 모든 것을 사용하는 것을 잊어 버렸습니다. onItemClick에서 : adapter.setSelected (position); 또는 listView.getAdapter(). setSelected (position); – greenapps

관련 문제