5
나는 Multiselected (checked) listview
을 원합니다. 항목을 선택하면 녹색 확인 표시가 나타납니다. 이를 위해 CheckedTextViews
을 사용합니다. ListView
은 데이터베이스에서 데이터를 가져옵니다. 나는 SimpleCursorAdapter
을 사용하고 있습니다. 버튼을 클릭하면 선택한 항목 (ID)이 다음 활동으로 전달됩니다.CheckedTextView가 확인되지 않았습니다.
내 문제는 CheckedTextView
의 체크 표시가 나타나지 않는다는 것입니다. 그러나 ID는 다음 활동으로 전달됩니다. 내가 뭘 잘못하고 있니? 그것을 고치는 방법?
selecttest.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Spinner
android:id="@+id/spinner_select_language"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
<Button
style="@style/btn_Font"
android:id="@+id/selecttest_start"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/spinner_test"
android:onClick="onClick"
android:text="@string/selecttest_start" />
<ListView
android:id="@+id/lv_lesson"
android:layout_width="match_parent"
android:layout_height="200dp"
android:fadeScrollbars="false"
android:choiceMode="multipleChoice"
android:layout_alignParentLeft="true"
android:cacheColorHint="#00000000"
android:layout_below="@+id/selecttest_start" >
</ListView>
</RelativeLayout>
dataset_ctv_lesson.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<CheckedTextView
style="@style/tv_Font"
android:id="@+id/ctv_lesson"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="@string/none"
android:checkMark="@drawable/ctv_state_checker"
/>
</RelativeLayout>
ctv_state_checker.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="false"
android:drawable="@drawable/btn_check_buttonless_off" />
<item android:state_checked="true"
android:drawable="@drawable/btn_check_buttonless_on" />
</selector>
SelectTestActivity.java
public class SelectTestActivity
extends Activity
implements OnItemSelectedListener
{
Database db;
SimpleCursorAdapter adaptercursor, lv_adaptercursor;
ListView lv_lesson;
// Arraylist for checked item in the lesson view
ArrayList<String> checkedlessons = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.selecttest);
// Create Database
db = new Database(this);
// Drop-Down-Menu to select a language
Spinner spinner_language = (Spinner) findViewById(R.id.spinner_select_language);
spinner_language.setOnItemSelectedListener(this);
Cursor cursor = db.createListViewCursor();
String[] displaycolumn = new String[]{"language"};
int[] displayview = new int[] {R.id.tv_language};
adaptercursor = new SimpleCursorAdapter(this, R.layout.datasetlanguage, cursor, displaycolumn, displayview, 0);
spinner_language.setAdapter(adaptercursor);
// ListView to select a lesson
lv_lesson = (ListView) findViewById(R.id.lv_lesson);
cursor = db.createListViewLessonCursor(getSelectedItemIDFromSpinnerLanguage());
displaycolumn = new String[]{"lesson"};
int[] displayview2 = new int[] {R.id.ctv_lesson};
lv_adaptercursor = new SimpleCursorAdapter(this, R.layout.dataset_ctv_lesson, cursor, displaycolumn, displayview2, 0);
lv_lesson.setAdapter(lv_adaptercursor);
lv_lesson.setOnItemClickListener(new ListView.OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
if (!checkedlessons.contains(Long.toString(id)))
{
checkedlessons.add(Long.toString(id));
// checked textview
lv_lesson.setItemChecked(position, true);
}
else
{
checkedlessons.remove(Long.toString(id));
// unchecked textview
lv_lesson.setItemChecked(position, false);
}
}
});
// Close the database
db.close();
}
RelativeLayout을 제거했으며 현재 작동합니다. 고마워. – kaschey
@ user1891764 이유를 이해 하시겠습니까? – faylon
SimpleCursorAdapter에는 레이아웃 파일과 커서 열을 표시해야하는보기가 필요합니다. 레이아웃 파일에는 이러한보기 만 포함되어야합니다. 그게 맞습니까? – kaschey