Блокнот Учебник: добавить baseadapter - PullRequest
0 голосов
/ 04 декабря 2011

Я сделал учебник по блокноту с сайта Android. Я добавил собственный модуль-класс. Теперь я также хочу добавить собственный baseadapter. Но у меня есть проблемы с реализацией.

Моя проблема в методе fillData (). Он находится в третьей части кода. Я тоже не уверен, понадобится ли мне курсор?

Я надеюсь, что кто-нибудь может мне помочь, чтобы исправить метод fillData ().

Мой модуль-класс

public class Module {
private String title;
private String device_type;
private String home_code;
private String device_code;

public Module(String n, String m, String hc, String mc) {
    title = n;
    device_type = m;
    home_code = hc;
    device_code = mc;
}

public String getTitle() { return title; }
public String getDeviceType() { return device_type; }
public String getHomeCode() { return home_code; }
public String getDeviceCode() { return device_code; }

}

Адаптер моего модуля:

public class ModuleAdapter extends BaseAdapter implements OnClickListener {
private Context context;

private List<Module> listModule;

public ModuleAdapter(Context context, List<Module> listModule) {
    this.context = context;
    this.listModule = listModule;
}

public int getCount() {
    return listModule.size();
}

public Object getItem(int position) {
    return listModule.get(position);
}

public long getItemId(int position) {
    return position;
}

public View getView(int position, View convertView, ViewGroup viewGroup) {
    Module entry = listModule.get(position);
    if (convertView == null) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.notes_row, null);
    }
    TextView tvTitle = (TextView) convertView.findViewById(R.id.text1);
    tvTitle.setText(entry.getTitle());

    TextView tvDeviceType = (TextView) convertView.findViewById(R.id.text2);
    tvDeviceType.setText(entry.getDeviceType());

    TextView tvHomeCode = (TextView) convertView.findViewById(R.id.text3);
    tvHomeCode.setText(entry.getHomeCode());

    TextView tvDeviceCode = (TextView) convertView.findViewById(R.id.text4);
    tvDeviceCode.setText(entry.getDeviceCode());

    return convertView;
}

@Override
public void onClick(View view) {
    Module entry = (Module) view.getTag();
    listModule.remove(entry);
    // listModule.remove(view.getId());
    notifyDataSetChanged();

}

private void showDialog(Module entry) {
    // Create and show your dialog
    // Depending on the Dialogs button clicks delete it or do nothing
}

} * * тысяча двадцать-один

Метод fillData () из основного кода:

    private void fillData() {
    //Cursor notesCursor = mDbHelper.fetchAllNotes();
    //startManagingCursor(notesCursor);

    final List<Module> from = new ArrayList<Module>();
    from.add(new Module(NotesDbAdapter.KEY_TITLE, NotesDbAdapter.KEY_DEVICETYPE, NotesDbAdapter.KEY_HOMECODE, NotesDbAdapter.KEY_DEVICECODE));

    // Now create a simple cursor adapter and set it to display
    //SimpleCursorAdapter notes = 
    //    new SimpleCursorAdapter(this, R.layout.notes_row, notesCursor, from, to);
    //notes.setViewBinder(new ModuleViewBinder());

    ModuleAdapter adapter = new ModuleAdapter(this, from);
    setListAdapter(adapter);

}

Большое спасибо!

Felix

1 Ответ

1 голос
/ 04 декабря 2011

Проблема в том, что ваши данные находятся в базе данных, поэтому вы должны продолжать использовать SimpleCursorAdapter, как вы это делали в коде, который вы закомментировали.

Ваш новый код помещает модуль, заполненный именами столбцов базы данных (а не фактическими данными) в ArrayList:

from.add(new Module(NotesDbAdapter.KEY_TITLE, NotesDbAdapter.KEY_DEVICETYPE, NotesDbAdapter.KEY_HOMECODE, NotesDbAdapter.KEY_DEVICECODE));

Тогда ваш пользовательский адаптер работает правильно, потому что он отображает эти значения.

Что, вероятно, сбило вас с толку, так это то, что вы передавали те же строки в SimpleCursorAdapter, но этот адаптер использует имена столбцов для извлечения данных из базы данных. Вместо этого ваш пользовательский адаптер просто показывает, что находится в списке.

Если вы хотите показать значения из базы данных, вам следует придерживаться SimpleCursorAdapter (или расширить его, если вам нужно сделать больше).

...