으로 전환 할 수 없습니다 내가 파일의 배열 설정 ArrayAdapter와,이 : 나는 항목 클릭하여 CheckedTextView의 체크 가능 상태를 변경하려면 다음CheckedTextView는 setOnItemClickListener에서 onCreate 방법
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].icon == R.drawable.directory_icon)
textView.setCheckMarkDrawable(null);
else if(fileList[position].icon == R.drawable.directory_up)
textView.setCheckMarkDrawable(null);
// 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;
}
};
합니다. 나는 이것을 좋아한다 :
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.file_manager);
lv = (ListView)findViewById(R.id.fileManagerList);
loadFileList();
file_list = findViewById(R.id.filesList);
lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
lv.setFocusable(false);
lv.setAdapter(adapter);
lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> myAdapter, View myView, int myItemInt, long mylng) {
//String selectedFromList = (lv.getItemAtPosition(myItemInt).toString());
chosenFile = fileList[myItemInt].file;
File sel = new File(path + "/" + chosenFile);
if (sel.isDirectory()) {
firstLvl = false;
str.add(chosenFile);
fileList = null;
path = new File(sel + "");
//adapter.notifyDataSetChanged();
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
{
View view = myAdapter.getChildAt(myItemInt);
CheckedTextView textView = (CheckedTextView) view
.findViewById(R.id.checkedTextItem);
Toast toast = Toast.makeText(getApplicationContext(),textView.isChecked(), Toast.LENGTH_LONG);
toast.show();
textView.toggle();
textView.setChecked(true);
}
}
});
}
click 이벤트가 제대로 처리되고있다. onCreate() 메서드의 else 문에서 CheckedTextView 항목을 가져올 수 있습니다. 해당 ID를 감지하고 해당 텍스트를 가져올 수도 있습니다. 하지만 그것을 토글하거나 setCheckable하려고하면 처리 할 수 없습니다. 그럼에도 불구하고 내 어댑터의 모든 항목을 전환하거나 설정할 때 체크 상태가 변경 될 수 있습니다 ... 이유가 무엇일까요?
감사합니다. 하지만이 경우 왜 내가 클릭 한 항목의 getText()를 얻을 수 있습니까? 내가 그 제목을 논리적으로 할 수 있다면, 그것의 setCheckable() 상태를 바꿀 수있다 ... –
나는 조언을 해줄 것이다 ... 그러나 나는 Item 클래스에서 체크 상태를 탐지하는 필드를 하나 더 만들었다. 이 항목. 그 후 항목을 클릭하면이 필드의 상태가 변경되고 내 어댑터의 notifyDataSetChanged()가 호출됩니다. 고마워요, 당신은 저를 해결책에 집어 넣었습니다! –