两个不同的颜色为android中的单独列表

时间:2014-10-30 06:52:23

标签: java android android-listview arraylist adapter

我有三个ArrayList,即A,B,C。我将ArrayList A和ArrayList B合并到ArrayList C(空)。我能够显示A和B中的所有元素。我的问题是我希望显示绿色A中的元素和greay颜色中B中的元素。我的代码就像这样

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元素。如何为每个列表制作不同的。

2 个答案:

答案 0 :(得分:1)

使用arraylist的size属性,

int flag=A.size();

并在你的getview方法中这样做: -

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

答案 1 :(得分:0)

注意:我想象flag变量是根据位置确定的。这个属性的设置并不明显。

由于您正在使用ViewHolder&#34;模式&#34;,因此在创建视图时不要设置位置相关逻辑。相反,在之后设置,您已确定要使用哪个视图(新视图或已存在的视图)。请注意,当您使用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);
}