【问题标题】:two Different color for saparate list in androidandroid中单独列表的两种不同颜色
【发布时间】:2014-12-26 03:02:25
【问题描述】:

我有三个 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;
        }

     }   

对于 C 数组列表中的 A 和 B 元素,上述代码始终以绿色显示。如何使每个列表不同。

【问题讨论】:

  • 为什么要对这个问题投反对票?怎么了
  • BluetoothDevice 是你的 pojo 类

标签: java android android-listview arraylist adapter


【解决方案1】:

使用arrylist的size属性,

int flag=A.size();

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

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

【讨论】:

  • 两个列表大小可能相同。那怎么办
  • 您已将数组列表 A 和 B 添加到 C 中,因此首先 C 将为 null 现在假设 A 有 10 个元素,因此您将 A 添加到 C 现在 C 有 10 个元素,现在我们假设 B 也有 10 个元素,我们也将其添加到 C 中,所以现在 C 有 20 个元素,我所做的是 flag=A.size(),所以对于 C 数组列表直到 A 的元素,它将提供绿色,然后是灰色。我希望如果我帮助接受了这个答案,你会理解这个解释
  • 逻辑好。如何为第三行做同样的事情(另一个数组列表)
  • 你有@Pramod Yadav
【解决方案2】:

注意:我想象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);
}               

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-05
    • 2014-07-22
    • 1970-01-01
    • 2021-11-14
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 2018-10-21
    相关资源
    最近更新 更多