私はそのようなカスタムアダプターを持っています:
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;
}
}
そして、Item クラスの toggle() メソッドでクリックされたアイテムのチェック状態を設定する listView setOnItemClickListener
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);
「すべて選択」アイテムのチェック状態がfalseのときにステートメントを呼び出すと、クリックしてすべてのアイテムをチェックできないためです。これをより良い方法で実装するにはどうすればよいですか?