Кажется, что вы не можете ссылаться на TableLayout в ListView обычным способом, поэтому мне пришлось использовать LinearLayout, чтобы заставить onItemClick работать.
Он даже дает вам несколько хороших аргументов для работы: parent, view, position и id, который я назначил Item с последним Sting (дополнительной строкой) в массиве.
Обратите внимание на 3 TextViews для параметра «to» и на то, что я использовал 4 строки в параметре «from». Последний является дополнительным, и это должен быть ключ " _id " из таблицы базы данных. Он присваивается идентификатору предмета. Работает хорошо.
new String[]{db.KEYITEMS_TXTITEMNAME, db.KEYITEMS_INTIDCAT, db.KEYITEMS_ROWID, db.KEYITEMS_ROWID},
new int[]{R.id.text1,R.id.text2,R.id.text3});
Это вся деятельность:
public class ListView2 extends ListActivity {
private DBAdapter db;
private Cursor getMatchingItems;
private ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.testview);
db = new DBAdapter(this);
db.open();
getMatchingItems = db.getMatchingItems(3, 1);
startManagingCursor(getMatchingItems);
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.testlistrow,
getMatchingItems,
new String[]{db.KEYITEMS_TXTITEMNAME, db.KEYITEMS_INTIDCAT, db.KEYITEMS_ROWID, db.KEYITEMS_ROWID},
new int[]{R.id.text1,R.id.text2,R.id.text3});
setListAdapter(adapter);
lv = getListView();
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long myId) {
final ListView lvTest = getListView();
final LinearLayout llTest = (LinearLayout) lvTest.getChildAt(position);
TextView tv1 = (TextView) llTest.findViewById(R.id.text1);
tv1.setText("CHANGE");
tv1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String s = llTest.getParent().toString();
Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT).show();
}
});
String s = String.valueOf(lvTest.getChildAt(position));
Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT).show();
}
});
}
}
И это тот XML, который я взял от этой прекрасной леди .
Она объясняет это хорошо для SimpleAdapter. Это всего лишь мой твик для SimpleCursorAdapter.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ListView android:id="@id/android:list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#000fff"
android:layout_weight="2"
android:drawSelectorOnTop="false">
</ListView>
<TextView android:id="@id/android:empty"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#FFff00"
android:text="No data"
/>
</LinearLayout>
Я надеюсь, что кто-то найдет это полезным, или КАК МОЖНО СКОРЕЕ сказать, что это не тот способ, если он знает лучший способ.
Спасибо