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中单独列表的两种不同颜色的主要内容,如果未能解决你的问题,请参考以下文章
vue通过v-for渲染的列表,可以单独操作的其中的列表的两种方法
Android 中使用spinner实现下拉列表的两种方法和getItemAtPosition()方法的使用