ListView でファイル ブラウザを作成しました。各行は、アイコンの ImageView、ファイル名の TextView、および CheckBox で構成されます。CheckBox を追加する前に、ディレクトリをクリックしてそのディレクトリにナビゲートしましたが、CheckBox を追加してからディレクトリ ナビゲーションが機能せず、ディレクトリをクリックしても何も起こりません。
私がやりたいことは、ユーザーがチェックボックスでディレクトリを選択できるようにしながら、ディレクトリをクリックしてそのディレクトリに移動するという標準のファイルブラウザ機能を維持することです。
public class MultiSelectIconifiedTextView extends LinearLayout {
private TextView mText;
private ImageView mIcon;
private CheckBox mCheckBox;
private MultiSelectionIconifiedText mCheckBoxText;
public MultiSelectIconifiedTextView(Context context, MultiSelectionIconifiedText multiSelectionIconifiedText) {
super(context);
/* First Icon and the Text to the right (horizontal),
* not above and below (vertical) */
this.setOrientation(HORIZONTAL);
mIcon = new ImageView(context);
mCheckBoxText = multiSelectionIconifiedText;
mIcon.setImageDrawable(multiSelectionIconifiedText.getIcon());
mCheckBox = new CheckBox(context);
mCheckBox.setPadding(0, 0, 20, 0); // 5px to the right
/* Set the initial state of the checkbox. */
mCheckBox.setChecked(multiSelectionIconifiedText.getChecked());
// left, top, right, bottom
mIcon.setPadding(0, 2, 5, 0); // 5px to the right
/* At first, add the Icon to ourself
* (! we are extending LinearLayout) */
addView(mIcon, new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
mText = new TextView(context);
mText.setText(multiSelectionIconifiedText.getText());
/* Now the text (after the icon) */
addView(mText, new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
mText.setPadding(0, 2, 150, 0);
addView(mCheckBox, new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
}
public void setText(String words) {
mText.setText(words);
}
public void setIcon(Drawable bullet) {
mIcon.setImageDrawable(bullet);
}
public void setCheckBoxState(boolean bool)
{
mCheckBox.setChecked(mCheckBoxText.getChecked());
mCheckBoxText.setChecked(true);
}
}
私のアクティビティには、ローカルと呼ばれる ListView があります。
local.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
l_itla.setSelectedPosition(position);
l_itla.setChecked(true, position);
String selectedFileString = l_directoryEntries.get(position)
.getText();
currenLocalFile = new File(selectedFileString);
if (selectedFileString.equals(getString(R.string.current_dir))) {
// Refresh
browseTo(currentLocalDirectory);
} else if (selectedFileString
.equals(getString(R.string.up_one_level))) {
upOneLevel();
} else {
File clickedFile = null;
switch (displayMode) {
case RELATIVE:
clickedFile = new File(currentLocalDirectory
.getAbsolutePath()
+ l_directoryEntries.get(position).getText());
localFiles.add(clickedFile);
break;
case ABSOLUTE:
clickedFile = new File(l_directoryEntries.get(position)
.getText());
localFiles.add(clickedFile);
Toast.makeText(FTPConnector.this, localFiles.toString(), Toast.LENGTH_SHORT).show();
break;
}
if (clickedFile != null)
currenLocalFile = clickedFile;
Toast.makeText(FTPConnector.this, localFiles.toString(), Toast.LENGTH_SHORT).show();
browseTo(clickedFile);
}
}
});
ビューから CheckBox コードを削除すると、ディレクトリをクリックすると機能するため、チェックボックスが ist item.l をブロックしているように見えます。