Получить все предметы из курсора в Android - PullRequest
2 голосов
/ 20 августа 2009

Я использую этот код, чтобы получить элемент из курсора, но он просто возвращает один элемент в моем списке. Итак, как мне получить все элементы в моем списке, это мой код?

class MyAdapter extends SimpleCursorAdapter
{
    private Context context;

    public MyAdapter(Context context, int layout, Cursor c, String[] from, int[] to)
    {
        super(context, layout, c, from, to);
        this.context = context;

    }
    public View getView(int position, View convertView, ViewGroup parent){
        Cursor cursor = getCursor();

        LayoutInflater inflater = ((Activity) context).getLayoutInflater();         
        View v = inflater.inflate(R.layout.sbooks_row, null);           
        TextView title = (TextView)findViewById(R.id.title);
        if(title != null){
            int index = cursor.getColumnIndex(SBooksDbAdapter.KEY_TITLE);
            String type = cursor.getString(index);
            title.setText(type);
        }

        TextView lyrics = (TextView)findViewById(R.id.lyrics);
        if(lyrics != null){
            int index = cursor.getColumnIndex(SBooksDbAdapter.KEY_LYRICS);
            String type = cursor.getString(index);
            lyrics.setText(type);
        }

        ImageView im = (ImageView)findViewById(R.id.icon);
        if(im!=null){
            int index = cursor.getColumnIndex(SBooksDbAdapter.KEY_FAVORITE);
            int type = cursor.getInt(index);
            if(type==1){
                im.setImageResource(android.R.drawable.btn_star_big_on);
            }
            else{
                im.setImageResource(android.R.drawable.btn_star_big_off);
            }
        }

        return v;
    }

Ответы [ 2 ]

5 голосов
/ 22 августа 2009

CursorAdapter ведет себя немного по-другому, чем другие адаптеры списка - вместо getView () волшебство здесь происходит в newView () и bindView (), поэтому я думаю, что getView () не тот метод, который нужно переопределять.

Вы можете получить только один результат, потому что после создания первой строки CursorAdapter ожидает, что bindView () вставит новые данные и повторно использует уже раздутую строку, и вы ожидаете, что getView () сделает это.

Я предложу вам попробовать переместить ваш код в newView (), чтобы раздуть ваше представление, и bindView (), чтобы выполнить фактическую логику для заполнения строк.

Удачи, и держите нас в курсе результатов.

0 голосов
/ 21 августа 2009

Я предполагаю, что курсор, возвращаемый методом getCursor (), корректно извлекает все строки для вашей таблицы, вы должны явно переместить курсор в позицию перед доступом к данным для строки, поэтому в начале вашего getView () метод, который вы должны вызвать.

cursor.moveToPosition(position);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...