2014-10-30 1 views
-2

3 개의 ArrayList, 즉 A, B, C가 있습니다. ArrayList A와 ArrayList B를 ArrayList C (비어 있음)에 병합했습니다. 나는 A와 B 모두의 모든 요소를 ​​표시 할 수 있습니다. 제 문제는 A에서 녹색으로, B에서 요소를 greay 색상으로 표시하려고합니다. 내 코드는 다음과 같습니다.android의 saparate 목록에 2 가지 색상이 있습니다.

private class MyListAdapter extends BaseAdapter{ 

    LayoutInflater mInflator; 

    boolean flag; 
    boolean flag1; 

    public MyListAdapter(ArrayList<BluetoothDevice> aList) { 

    // TODO Auto-generated constructor stub 
    super(); 
    mInflator = TrackDevices.this.getLayoutInflater(null); 

    cArrayList = aList; 

    flag = cArrayList.addAll(aArrayList); 

     flag1 = cArrayList.addAll(bArrayList);  

    } 

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

    ViewHolder holder = new ViewHolder(); 
     // TODO Auto-generated method stub 

    if(view == null){ 

    view = mInflator.inflate(R.layout.track_frag, null);     
    holder.deviceTag = (TextView)view.findViewById(R.id.track);    

    if(flag){ 
     view.setBackgroundColor(Color.GREEN); 
    }else if(flag1){ 
     view.setBackgroundColor(Color.GRAY); 
    }    

    view.setTag(holder); 

     }else{     

     holder = (ViewHolder)view.getTag(); 
     } 

     BluetoothDevice device = cArrayList.get(position); 
      final String deviceName = device.getAddress(); 
      if (deviceName != null && deviceName.length() > 0){ 

       holder.deviceTag.setText(deviceName); 

      }else{    
      holder.deviceTag.setText("No devices"); 
     } 

      return view; 
     } 

    } 

위의 코드는 C arraylist의 A 및 B 요소에 대해 항상 녹색으로 표시됩니다. 각 목록마다 다른 방법.

+0

왜이 질문에 대한 반대 투표? 무엇이 잘못 되었습니까 – Shiv

+0

BluetoothDevice가 귀하의 pojo 클래스입니다 – Lokesh

답변

1

arrylist의 크기 속성을 사용

int flag=A.size(); 

과의 getView 방법에

은 다음과 같이 그것을 : -

if(position<flag) 
{ 
    view.setBackgroundColor(Color.GREEN); 
} 
else 
{ 
    view.setBackgroundColor(Color.GRAY); 
}    
+0

두 목록의 크기가 같을 수 있습니다. 그렇다면 어떻게해야합니까 – Shiv

+0

arraylists A와 B를 C에 추가했습니다. 그래서 첫 번째 C는 null이됩니다. 이제 A에 10 개의 원소가 있다고 가정하여 C에 A를 추가합니다. 이제 C에 10 개의 원소가 있습니다. 이제 B는 또한 10 개의 원소를가집니다. 그리고 우리는 그것을 C에 추가합니다. 그래서 C는 20 가지 요소를 가졌습니다. flag = A.size()입니다. C의 요소가 A 요소까지 Green과 그 회색을 제공합니다. 여러분이 이해할 수 있기를 바랍니다. 이 설명과 함께, 나는이 대답을 수락하는 데 도움이된다면 –

+0

좋은 논리. 어떻게 제 3 행 (다른 arraylist)에 대한 동일한 일을 – Shiv

0

참고 : 나는 flag 변수를 상상있어하는 것은 함수로 결정된다 위치의. 이 속성이 설정된 곳은 분명하지 않습니다.

ViewHolder "패턴"을 사용하고 있으므로보기를 만들 때 위치 종속 논리를 설정하지 마십시오. 대신, 후에 어떤 뷰 (이미 존재하는 뷰 또는 이미 존재 한 뷰)를 결정한 후에 으로 설정하십시오. ViewHolders를 사용할 때 뷰를 다시 사용한다는 것을 기억하십시오. 즉,보기가 다른 위치에서 재활용되고 재사용됨에 따라 항목 (또는 해당 내용)의 위치와 관련된 모든 논리는보기가 작성되거나 재활용 된 후에 결정되어야합니다. 실제로

, 당신의 setBackgroudnColor 라인의 위치를 ​​변경합니다

if(view == null){ 

... 
/* REMOVE THIS FROM HERE 
if(flag){ 
    view.setBackgroundColor(Color.GREEN); 
}else if(flag1){ 
    view.setBackgroundColor(Color.GRAY); 
}    
*/ 
}else{     
    ... 
    holder = (ViewHolder)view.getTag(); 
} 

// ADD IT HERE: (After you've determined the view) 
if(flag){ 
    view.setBackgroundColor(Color.GREEN); 
}else if(flag1){ 
    view.setBackgroundColor(Color.GRAY); 
}    
관련 문제