我有这样一个自定义适配器:
adapter = new ArrayAdapter<Item>(this,
R.layout.file_manager, R.id.checkedTextItem,
fileList)
{
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// creates view
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.item, null);
view.setFocusable(false);
CheckedTextView textView = (CheckedTextView) view
.findViewById(R.id.checkedTextItem);
// put the image on the text view
textView.setCompoundDrawablesWithIntrinsicBounds(
fileList[position].icon, 0, 0, 0);
textView.setTextColor(Color.WHITE);
textView.setText(fileList[position].file);
if(fileList[position].file.equalsIgnoreCase("select all") & (fileList[position].check == true))
{
for(int i =0;i<fileList.length;i++)
{
fileList[i].setItemCheck(true);
chosenFile = fileList[i].file;
File sel = new File(path + "/" + chosenFile);
if (sel.isFile())
resFiles.add(sel);
}
resFiles.remove(position);
}
else if(fileList[position].file.equalsIgnoreCase("select all") & (fileList[position].check == false))
{
{
for(int i =0;i<fileList.length;i++)
{
fileList[i].setItemCheck(false);
}
}
}
if(fileList[position].icon == R.drawable.directory_icon)
textView.setCheckMarkDrawable(null);
else if(fileList[position].icon == R.drawable.directory_up)
textView.setCheckMarkDrawable(null);
if(fileList[position].check == true)
textView.setChecked(true);
else
textView.setChecked(false);
// add margin between image and text (support various screen
// densities)
int dp5 = (int) (5 * getResources().getDisplayMetrics().density + 0.5f);
textView.setCompoundDrawablePadding(dp5);
textView.setFocusable(false);
return view;
}
};
我有一个类项目,在那里我创建了布尔字段检查:+
public class Item {
public String file;
public int icon;
public boolean check;
public Item(String file, Integer icon, boolean check) {
this.file = file;
this.icon = icon;
this.check = check;
}
public String getItemFile()
{
return file;
}
public int getItemIcon()
{
return icon;
}
public boolean getItemCheck()
{
return check;
}
public void setItemCheck(boolean check)
{
this.check = check;
}
public void setItemFile(String file)
{
this.file = file;
}
public void setItemIcon(int icon)
{
this.icon = icon;
}
public void toggle()
{
check = !check;
}
@Override
public String toString() {
return file + " "+ icon+ " "+ check;
}
}
还有我的 listView setOnItemClickListener,我在其中设置了项目的检查状态,这是使用 Item 类的 toggle() 方法单击的
lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> myAdapter, View myView, int myItemInt, long mylng)
{
//String selectedFromList = (lv.getItemAtPosition(myItemInt).toString());
myView.setFocusable(false);
chosenFile = fileList[myItemInt].file;
File sel = new File(path + "/" + chosenFile);
Log.i("path",sel.toString());
if (sel.isDirectory()) {
firstLvl = false;
str.add(chosenFile);
fileList = null;
path = new File(sel + "");
loadFileList();
lv.setAdapter(adapter);
}
else if (chosenFile.equalsIgnoreCase("up") && !sel.exists()) {
// present directory removed from list
String s = str.remove(str.size() - 1);
// path modified to exclude present directory
path = new File(path.toString().substring(0,
path.toString().lastIndexOf(s)));
fileList = null;
// if there are no more directories in the list, then
// its the first level
if (str.isEmpty()) {
firstLvl = true;
}
loadFileList();
lv.setAdapter(adapter);
}
else
{
fileList[myItemInt].toggle();
if (fileList[myItemInt].check == true)
resFiles.add(sel);
else
resFiles.remove(sel);
adapter.notifyDataSetChanged();
Log.i(fileList[myItemInt].file,Boolean.toString(fileList[myItemInt].check));
}
}
});
我想实现检查所有 CheckedTextView 的能力。我尝试在适配器的 getView() 方法中执行此操作。我可以检查所有项目,但问题在于取消选中。因为当我fileList[i].setItemCheck(false);
在“全选”项目的检查状态为假时调用语句时,我无法通过单击检查所有项目。我怎样才能以更好的方式实现这一点?