如何获取ListActivity的光标

时间:2012-08-23 14:12:46

标签: android listactivity simplecursoradapter

我使用布局中最简单的方法来定义listview:

<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" />

由于我需要一个选中的列表,我在listitem模板中使用CheckedTextView。用户可以根据需要检查列表中的多个项目。它工作正常。

我有一个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将是其他视图类(如产品,客户端等)的父级。 abstract renderlistview()将由{{1>的子项实现例如:

SimpleCursorAdapter

ActivityProductList 正常运行。 用户可以完成所有操作,然后单击在父类中定义和实现的FINISH按钮,列表视图也是如此。他的事件处理程序如下:

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 );
 }
}

概念是:获取所选项目的ID。

然而,在我标记为注释的行中,程序崩溃并出现错误: eclipse screenshot part

this.getListAdapter()给我一个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() ); } } ,但演员表会崩溃。

有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:0)

如果没有更多信息,很难说你为什么会遇到这个问题。您可以调试代码并在注释错误行中添加一个断点,然后查看适配器的类型。

我还建议,因为你的方法名是getCheckedItems(),只需使用getListView().getCheckedItemIds(),只需确保你已将你的choiceMode设置为单个或多个。

编辑: 由于您的方法并不真正需要游标,为什么不使用返回的listadapter? getListAdapter()。getItemId()将返回您的id。

答案 1 :(得分:0)

我用剑解决了这个问题......

我试图从父类(ActivityList)访问SimpleCursorAdapter。这种方式不起作用。因此,I§ve将​​基类更改为抽象,并添加一个抽象方法,该方法将返回所选行id。抽象方法在子类(ActivityProductList)中实现。

我知道这个解决方案没有提到原始问题。但它有效......

谢谢大家的回复。