リストビューを定義するには、レイアウトで最も簡単な方法を使用します。
<ListView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:drawSelectorOnTop="true" />
チェックリストが必要なのでCheckedTextView
、listitem テンプレートで使用します。ユーザーはリスト内の項目を好きなだけチェックできます。それはうまくいっています。
私はListActivity
ルートビューを持っています:
public abstract class ActivityList extends ListActivity {
protected ListView listView;
public abstract void renderListView( String filter );
@Override
public void onCreate( Bundle savedInstanceState ) {
super.onCreate( savedInstanceState );
setContentView( R.layout.commonlist );
listView = getListView();
}
}
ActivitiList
製品、クライアントなどの他のビュークラスの親になるため、抽象的です。抽象 renderlistview()は、次のような子によって実装されますSimpleCursorAdapter
。
public class ActivityProductList extends ActivityList {
@Override
public void onCreate( Bundle savedInstanceState ) {
super.onCreate( savedInstanceState );
...
renderListView( null );
}
@Override
public void renderListView( String filter ) {
listView.setChoiceMode( ListView.CHOICE_MODE_MULTIPLE );
...
SimpleCursorAdapter sca = new SimpleCursorAdapter( this, R.layout.productlistitemchecked, mCursor, from, to );
setListAdapter( sca );
}
}
ActivityProductListは正常に動作しています。ユーザーはやりたいことをすべて実行し、リストビューもある親クラスで定義および実装された FINISH ボタンをクリックします。彼のイベント ハンドラーは次のとおりです。
protected void getCheckedItems() {
try {
String className = this.getListAdapter().getClass().getName();
Log.e("NanCal", className);
Class c = this.getListAdapter().getClass();
ListAdapter la = this.getListAdapter();
SimpleCursorAdapter ca = ( SimpleCursorAdapter )la;
Cursor cursor = ca.getCursor();
SparseBooleanArray selectedItems = listView.getCheckedItemPositions();
for( int i = 0; i < selectedItems.size(); i++ ) {
int selectedPosition = selectedItems.keyAt( i );
cursor.moveToPosition( selectedPosition );
long rowId = ca.getItemId( selectedPosition );
Log.d( "", "row id: " + rowId );
}
} catch( Exception exception ) {
Log.e( "NanCalc", exception.getMessage() + "::" + exception.toString() );
}
}
コンセプトは、選択したアイテムの ID を取得することです。
ただし、コメントでマークした行で、プログラムがエラーでクラッシュします。
this.getListAdapter ()CursorAdapter
は、キャストがクラッシュするよりも私に与えます。
誰か助けてくれませんか?