Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android中saparate列表的两种不同颜色_Java_Android_Android Listview_Arraylist_Adapter - Fatal编程技术网

Java android中saparate列表的两种不同颜色

Java android中saparate列表的两种不同颜色,java,android,android-listview,arraylist,adapter,Java,Android,Android Listview,Arraylist,Adapter,我有三个ArrayList,即A、B、C。我将ArrayList A和ArrayList B合并为ArrayList C(空)。我能够显示A和B中的所有元素。我的问题是我想以绿色显示A中的元素,以灰色显示B中的元素。我的代码是这样的 private class MyListAdapter extends BaseAdapter{ LayoutInflater mInflator; boolean flag; boolean flag1; public

我有三个ArrayList,即A、B、C。我将ArrayList A和ArrayList B合并为ArrayList C(空)。我能够显示A和B中的所有元素。我的问题是我想以绿色显示A中的元素,以灰色显示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;
        }

     }   
私有类MyListAdapter扩展BaseAdapter{
拉平机;
布尔标志;
布尔标志1;
公共MyListAdapter(ArrayList){
//TODO自动生成的构造函数存根
超级();
mInflator=TrackDevices.this.getLayoutFlater(null);
cArrayList=aList;
flag=cArrayList.addAll(aArrayList);
flag1=cArrayList.addAll(bArrayList);
}   
@凌驾
公共视图getView(内部位置、视图视图、视图组父视图){
ViewHolder=新的ViewHolder();
//TODO自动生成的方法存根
如果(视图==null){
视图=mInflator.充气(R.layout.track\u frag,空);
holder.deviceTag=(TextView)view.findViewById(R.id.track);
国际单项体育联合会(旗){
视图.setBackgroundColor(颜色.绿色);
}else if(标志1){
视图.背景颜色(颜色.灰色);
}               
视图.设置标签(支架);
}否则{
holder=(ViewHolder)view.getTag();
}
BluetoothDevice=cArrayList.get(位置);
最后一个字符串deviceName=device.getAddress();
如果(deviceName!=null&&deviceName.length()>0){
holder.deviceTag.setText(设备名称);
}否则{
holder.deviceTag.setText(“无设备”);
}
返回视图;
}
}   

以上代码在C arraylist中始终以绿色显示A和B元素。如何使每个列表不同

使用arrylist的size属性

int flag=A.size();
在getview方法中,执行以下操作:-

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

if(position注意:我想象的是
标志
变量被确定为位置的函数。设置此属性的位置不明显

由于您使用的是ViewHolder“模式”,因此在创建视图时不要设置位置相关逻辑。而是在确定要使用的视图(新视图或已存在的视图)之后设置它们。请记住,当您使用ViewHolder时,您使用的是视图。这意味着您的视图将在不同的位置被回收和重用,因此,与项目(或其内容)定位相关的任何逻辑都应在创建或回收视图后确定

在实践中,更改挫折地面颜色线的位置:

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);
}               

可能两个列表的大小都是一样的。那么怎么做呢?你已经在C中添加了ArrayList a和B,所以第一个C将为空,现在让我们假设a有10个元素,所以你在C中添加了a现在C有10个元素,现在我们假设B也有10个元素,我们也在C中添加了,所以现在C有20个元素。我所做的是flag=a.size(),所以对于C arraylist,直到A的元素,它将提供绿色,然后是灰色。我希望你能理解这个解释,如果我帮助接受这个答案,很好的逻辑。如何对第三行(另一个arraylist)u那里做同样的事情@Pramod YadavWhy对这个问题投反对票?BluetoothDevice是你的pojo类吗