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

Posted

技术标签:

【中文标题】android中单独列表的两种不同颜色【英文标题】:two Different color for saparate list in android 【发布时间】: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 类 【参考方案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);
               

【讨论】:

以上是关于android中单独列表的两种不同颜色的主要内容,如果未能解决你的问题,请参考以下文章

Matlab图例中同一行的两种不同颜色

vue通过v-for渲染的列表,可以单独操作的其中的列表的两种方法

Android 中使用spinner实现下拉列表的两种方法和getItemAtPosition()方法的使用

Android中使用Gson解析JSON数据的两种方法

Android 中使用spinner实现下拉列表的两种方法和getItemAtPosition()方法的使用

ANDROID中FRAGMENT的两种创建方式