我有三个ArrayList,即A,B,C。我将ArrayList A和ArrayList B合并到ArrayList C(空)。我能够显示A和B中的所有元素。我的问题是我希望显示绿色A中的元素和greay颜色中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 arraylist中的A和B元素。如何为每个列表制作不同的。
答案 0 :(得分:1)
使用arraylist的size属性,
int flag=A.size();
并在你的getview方法中这样做: -
if(position<flag)
{
view.setBackgroundColor(Color.GREEN);
}
else
{
view.setBackgroundColor(Color.GRAY);
}
答案 1 :(得分:0)
注意:我想象flag
变量是根据位置确定的。这个属性的设置并不明显。
由于您正在使用ViewHolder&#34;模式&#34;,因此在创建视图时不要设置位置相关逻辑。相反,在之后设置,您已确定要使用哪个视图(新视图或已存在的视图)。请注意,当您使用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);
}