0

我的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。

感谢您的关注。

编辑:好的,我很难解释我想要什么,对此感到抱歉(加上我的代码误会你的方式,因为它是错误的:()

我想要的是以下模板:具有自定义 cursorAdapter 的 ListView 具有此结构:

  • 一个空的 EditText(用户可以在其中单击以在数据库中添加一行)

  • 在 textViews 中显示来自数据库表的数据的行列表

  • 在最后一行,另一个 editText 与第一行具有相同的目的。

我试图了解自定义适配器是如何工作的,我已经阅读了资料,但我不知道如何在我的情况下做到这一点。

4

0 回答 0