【问题标题】:Return object from CursorAdapter.get()从 CursorAdapter.get() 返回对象
【发布时间】:2012-08-29 15:46:06
【问题描述】:

我正在重写 CursorAdapter 并且我需要获取最后一项,问题是 CursorAdapter 实际上有一个 get() 方法...但是 source 是一个 db 并且它返回一个普通对象! (我什至不知道它是什么,我希望它返回一个 Cursor 对象...)

无论如何,我怎样才能让它返回我的 Wrapper db 行类的实例?

示例: 说我的数据库有这样的行:

id|名字|姓氏

我会从中创建一个类Person

现在我想要一个来自光标适配器的 Person get(int i) 方法...

【问题讨论】:

    标签: android android-cursoradapter


    【解决方案1】:

    只需使用 adapter.getItem() 并将其转换为 Cursor,无需像接受的答案那样手动移动光标

    Cursor cursor = (Cursor) myCursorAdapter.getItem(position);
    String myColumnValue = cursor.getString(cursor.getColumnIndex("YOUR_COLUMN_NAME"));
    

    【讨论】:

    • 太棒了!从未知道。挽救了我几个小时的生命!
    【解决方案2】:

    现在我想要一个来自光标适配器的 Person get(int i) 方法...

    这似乎是一个奇怪的要求。我会将光标本身(或从 CursorAdapter 的getItem() 返回的光标)传递给我的 Activity 中的常规方法。 但是这里是创建Person get() 方法的基本步骤。

    创建你的 Person 类:

    public class Person {
        long id;
        String firstName;
        String surname;
    }
    

    在您的自定义 CursorAdapter 中只需使用如下方法:

    public Person get(int position) {
        Cursor cursor = getCursor();
        Person person;
        if(cursor.moveToPosition(position)) {
            person = new Person();
            person.id = cursor.getLong(cursor.getColumnIndex("_id"));
            person.firstName = cursor.getString(cursor.getColumnIndex("firstName"));
            person.surname = cursor.getString(cursor.getColumnIndex("surname"));
            results.add(person);
        }
    
        return person;
    }
    

    【讨论】:

      【解决方案3】:

      好吧,我必须调试才能找到答案。假设你有这样的东西

      SimpleCursorAdapter

      themesAdapter = new SimpleCursorAdapter(getContext(), R.layout.spinner_with_count, null,
                      new String[]{ThemeData.COLUMN_ID, ThemeData.COLUMN_SET_COUNT}, new int[] { R.id.spinnerTxLabel, R.id.spinnerTxCount }, 0);
              inputTheme.setAdapter(themesAdapter);
      

      那么你必须像这样检索。

      inputTheme.setOnItemSelectedListener(new OnItemSelectedListener() {
                      @Override
                      public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
                          // if not all themes, get subthemes items
                          if(position > 0){
      
                                  // load subtheme
                                  Cursor currentCursor = (Cursor)inputTheme.getAdapter().getItem(position);
                                  if(currentCursor != null) {
                                      String value = currentCursor.getString(currentCursor.getColumnIndexOrThrow(Data.COLUMN_ID));
                                  }
                              }
                          }
      

      };

      【讨论】:

        猜你喜欢
        • 2014-04-03
        • 2013-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-14
        • 2015-12-21
        • 2013-11-03
        • 2013-09-29
        相关资源
        最近更新 更多