3

よくある問題と思われることについて書いて申し訳ありませんが、私はすでにこの 1 つのタスクに 5 時間取り組んでおり、単純にあきらめました。

私は小さな Android アプリを作成しています。今すべきことは、小さな SQLite データベースを保持し、メモを書き込んだり編集したりできるようにすることだけです。すべてが SQL で正常に動作します。私の問題は ListView にあります。何をしても、新しいメモを追加しても更新が拒否されます。新しいノートを表示する唯一の方法は、別のノートで編集モードに入って戻ってくるときです。

ソースの関連部分は次のとおりです。

public class MainActivity extends Activity {

ArrayAdapter<NoteItem> mAdapter;
public static NoteDataBase ndb;
ListView listView;
ArrayList a;

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ndb = new NoteDataBase(this);
    a = ndb.getAllNotes();

            //LISTVIEW DO NOT TOUCH
/***********/   mAdapter = new ArrayAdapter<NoteItem>(this, 
/***********/       android.R.layout.simple_list_item_1, a);
/***********/       listView = (ListView) findViewById(R.id.listView1);
/***********/   listView.setAdapter(mAdapter);
            //*****************

}

//New Note button
public void newNoteAction(View view){
    ndb.addNote(new NoteItem("Title", "Contents"));
    a = ndb.getAllNotes();
    mAdapter = new ArrayAdapter<NoteItem>
                                (this, android.R.layout.simple_list_item_1, a);
    mAdapter.notifyDataSetChanged();
    System.out.println(ndb.getAllNotes().size());
}

最後の印刷は、実際に新しいメモを作成しているかどうかを確認するためのものです。

十分な情報を提供できれば幸いです。他に何か必要な場合は教えてください。私はすでに読んだほとんどすべてを試しましたが、1つのタスクでほぼ5時間後、私は夢中になるポイントがあります:)

ありがとう、

シェフ

4

3 に答える 3

1

問題は、にArrayAdapter関連付けられていない の新しいインスタンスを作成して追加していることにあるようListViewです。

notifyDataSetChanged()リッスンしているものにイベントを送信します-ListView古いアダプターをリッスンしています。

于 2013-04-26T04:48:26.403 に答える
0

アダプターを更新したかったようですが、代わりに新しいアダプターを作成しています。listView.setAdapter(mAdapter)ここで、もう一度呼び出すと、この新しいアダプターが に設定され、ListView機能します。

しかし、毎回新しいアダプターを作成するのは良い方法ではありません。データベースを使用しているので、CursorAdapterを読んでみてください。

于 2013-04-26T04:48:14.523 に答える