Java android中saparate列表的两种不同颜色
我有三个ArrayList,即A、B、C。我将ArrayList A和ArrayList B合并为ArrayList C(空)。我能够显示A和B中的所有元素。我的问题是我想以绿色显示A中的元素,以灰色显示B中的元素。我的代码是这样的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
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类吗