【发布时间】:2017-07-14 16:21:30
【问题描述】:
我正在使用 CheckBox 在列表视图中列出已安装的应用程序,我正在选择任何项目并将其发送以进行扫描,扫描后我试图更改正确更改的行颜色,但是当我滚动列表视图时,该颜色在下面的许多行上发生了变化,我只想改变那个位置,而不是在滚动其他行时改变。
我在哪里更改 Activity 中的行颜色。
String[] separated = result.split(":");
int position = Integer.parseInt(separated[1]);
if (separated[0].equals("R")) {
View v = listView.getChildAt(position);
v.setBackgroundColor(Color.RED);
} else {
View v = listView.getChildAt(position);
v.setBackgroundColor(Color.GREEN);
}
我的 BaseAdapter
public class Installedapps extends BaseAdapter {
public List<CustomObject> list;
CustomObject object2;
boolean[] itemChecked;
Activity context;
public Installedapps(Activity context, List<CustomObject> arg1) {
super();
this.context = context;
list = arg1;
itemChecked = new boolean[list.size()];
object2 = new CustomObject();
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public CustomObject getItem(int position) {
// TODO Auto-generated method stub
return list.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
public void remove(int position) {
list.remove(position);
}
@Override
public View getView(final int position, View convertView,
ViewGroup parent) {
final ViewHolder holder;
final CustomObject object = getItem(position);
if (convertView == null) {
holder = new ViewHolder();
// TODO Auto-generated method stub
LayoutInflater inflater = context.getLayoutInflater();
convertView = inflater.inflate(R.layout.adapter_installed_apps,
parent, false);
holder.im = (ImageView) convertView
.findViewById(R.id.allapps_image);
holder.checkBox = (CheckBox) convertView
.findViewById(R.id.btn_scan_allapps);
holder.checkBox.setChecked(false);
holder.md5 = (TextView)convertView.findViewById(R.id.md5TXT);
holder.name = (TextView) convertView
.findViewById(R.id.allapps_pacagename);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
final ApplicationInfo into = PackageUtil.getPackagePath(
context, object.Aplicationname);
String pacage = object.Aplicationname;
String name = (String) into.loadLabel(context.getPackageManager());
Drawable ICON = into.loadIcon(context.getPackageManager());
final File file = new File(into.publicSourceDir);
holder.im.setImageDrawable(ICON);
holder.name.setText(name);
holder.md5.setText(file.toString());
if (itemChecked[position])
holder.checkBox.setChecked(true);
else
holder.checkBox.setChecked(false);
holder.checkBox.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (holder.checkBox.isChecked()){
itemChecked[position] = true;
DetailMessageModel.getInstance().changeState(
file.toString() + ":" + Integer.toString(position)
);
}
else{
itemChecked[position] = false;
RemoveItemModel.getInstance().changeState(
file.toString() + ":" + Integer.toString(position)
);
}
}
});
return convertView;
}
}
class ViewHolder {
CheckBox checkBox;
TextView name, md5;
ImageView im;
}
【问题讨论】:
-
尝试在您的适配器 getview 方法中实现行颜色逻辑。
标签: android listview android-listview