CustomAdapter с различными типами строк - PullRequest
0 голосов
/ 16 марта 2012

У меня проблема с моим customAdapter, я хочу, чтобы он показывал editText, затем список из базы данных, затем снова editText.

Позвольте мне показать вам мой код адаптера:

package com.android.adapter;

import com.android.activity.R;

import android.content.Context;
import android.database.Cursor;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CursorAdapter;
import android.widget.EditText;
import android.widget.TextView;

public class NotesCursorAdapter extends CursorAdapter{

    private Context context;
    private int addNoteTopPosition = 0;
    private int addNoteBottomPosition;
    private static final int TYPE_ITEM = 0;
    private static final int TYPE_ADD_NOTE_BOTTOM = 1;
    private static final int TYPE_ADD_NOTE_TOP = 2;
    private static final int TYPE_MAX_COUNT = TYPE_ADD_NOTE_TOP + 1;

    public NotesCursorAdapter (Context context, Cursor cursor, boolean flag){
        super(context, cursor, flag);
        this.context = context;
    }



    @Override
    public void bindView(View v, Context con, Cursor cursor) {
        //      System.out.println("BindView");
        int type = getItemViewType(cursor.getPosition());
        if (v == null) {
            switch (type) {

            case TYPE_ADD_NOTE_TOP:
                EditText editText = (EditText)v.findViewById(R.id.add_note_top_id);
                break;

            case TYPE_ITEM:
                TextView content = (TextView)v.findViewById(R.id.note);
                content.setText(cursor.getString(cursor.getColumnIndex("content_note")));
                break;

            case TYPE_ADD_NOTE_BOTTOM:
                EditText editText2 = (EditText)v.findViewById(R.id.add_note_bottom_id);
                break;


            }
        }
    }

    @Override
    public View newView(Context con, Cursor cursor, ViewGroup vp) {
        //      System.out.println("NewView");
        LayoutInflater inflater = LayoutInflater.from(con);
        View v = inflater.inflate(R.layout.row_note, vp, false);
        //      bindView(v, con, cursor);
        //      return v;

        ViewHolder holder = null;
        int type = getItemViewType(cursor.getPosition());
        if (vp == null) {
            holder = new ViewHolder();
            switch (type) {

            case TYPE_ADD_NOTE_TOP:
                v = inflater.inflate(R.layout.add_note_top, null);
                holder.textView = (EditText)vp.findViewById(R.id.add_note_top_id);
                break;
            case TYPE_ITEM:
                v = inflater.inflate(R.layout.row_note, null);
                holder.textView = (TextView)vp.findViewById(R.id.note);
                holder.textView.setText(cursor.getString(cursor.getColumnIndex("content_note")));
                break;
            case TYPE_ADD_NOTE_BOTTOM:
                v = inflater.inflate(R.layout.add_note_bottom, null);
                holder.textView = (EditText)vp.findViewById(R.id.add_note_bottom_id);
                break;
            }
            v.setTag(holder);
        } else {
            holder = (ViewHolder)v.getTag();
        }

        addNoteBottomPosition = cursor.getCount()-1;

        return v;

    }

    @Override
    public int getItemViewType(int position) {
        int type;
        if (position == addNoteTopPosition){
            type = TYPE_ADD_NOTE_TOP;
        } else if (position == addNoteBottomPosition){
            type = TYPE_ADD_NOTE_BOTTOM;
        }else {
            type = TYPE_ITEM;
        }
        return type;
    }

    @Override
    public int getViewTypeCount() {
        return TYPE_MAX_COUNT;
    }

    public static class ViewHolder {
        public TextView textView;
    }


}

В результате у меня есть список из моей базы данных, но отсутствует editText. Поскольку я новичок в Android, я явно что-то неправильно понял или просто не понял, конечно, о bindView и newView.

Спасибо за внимание.

РЕДАКТИРОВАТЬ: Хорошо, я плохо объясняю, что я хочу, извините за это (плюс за то, что мой код ошибается, потому что это неправильно :()

Мне нужен следующий шаблон: ListView с пользовательским адаптером курсора, который имеет такую ​​структуру:

  • Пустой текст редактирования (где пользователь может щелкнуть, чтобы добавить строку в базу данных)

  • Список строк, отображающий данные из таблицы базы данных в textViews

  • В последнем ряду другой текст редактирования, имеющий ту же цель, что и первый.

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

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