私は最初のAndroidアプリを作成中です。私は現在、カスタムアダプターを機能させようとしています。
これはコードです:
CustomAdapter クラス:
class CustomListAdapter extends BaseAdapter {
Context mContext;
// List <Note> notesR = new ArrayList<Note>();
ArrayList<Note> notesR;
public CustomListAdapter (List notes) {
// mContext = context;
// notesR = = notes;
notesR = new ArrayList<Note>(3);
notesR.add(new Note("Hello", "bye", new Date()));
notesR.add(new Note("Hello", "bye", new Date()));
notesR.add(new Note("Hello", "bye", new Date()));
}
@Override
public int getCount() {
return notesR.size();
}
@Override
public Object getItem(int i) {
return notesR.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
// This method is called to draw each row of the list
@Override
public View getView(int index, View convertView, final ViewGroup parent) {
View vi = convertView;
if (vi == null) {
LayoutInflater inflater;
inflater = LayoutInflater.from(parent.getContext());
vi = inflater.inflate(R.layout.item_list, parent, false);
}
final Note noteModel = notesR.get(index);
TextView date = (TextView) vi.findViewById(R.id.date);
date.setText("" + noteModel.getDate());
TextView title = (TextView) vi.findViewById(R.id.title);
title.setText(noteModel.getTitle());
TextView content = (TextView) vi.findViewById(R.id.content);
content.setText(noteModel.getNote());
// here you inflate the layout you want for the row
final View view = View.inflate(mContext, R.layout.item_list, null);
return view;
リスト ノート クラス:
public class ListNotesActivity extends Activity {
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
notes.remove(info.position);
populateList();
return true;
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_CANCELED){
return;
}
Serializable extra = data.getSerializableExtra("Note");
if (extra != null){
Note newNote = (Note)extra;
if (editingNoteId > -1){
notes.set(editingNoteId, newNote);
editingNoteId = -1;
}
else {
notes.add(newNote);
};
populateList();
}
}
private List<Note> notes = new ArrayList<Note>();
private ListView notesListView;
private int editingNoteId = -1;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_notes);
notesListView = (ListView)findViewById(R.id.notesListView);
notesListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View view, int itemNumber, long id) {
Intent editNoteIntent = new Intent(view.getContext(), EditNotesActivity.class);
editNoteIntent.putExtra("Note", notes.get(itemNumber));
editingNoteId = itemNumber;
startActivityForResult(editNoteIntent, 1);
}
});
registerForContextMenu(notesListView);
notes.add(new Note("1 Note", "blah blah", new Date()));
notes.add(new Note("2 Note", "blah blah", new Date()));
notes.add(new Note("3 Note", "blah blah", new Date()));
notes.add(new Note("4 Note", "blah blah", new Date()));
notes.add(new Note("5 Note", "blah blah", new Date()));
notes.add(new Note("6 Note", "blah blah", new Date()));
notes.add(new Note("7 Note", "blah blah", new Date()));
notes.add(new Note("8 Note", "blah blah", new Date()));
populateList();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.list_notes, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
//notes.add(new Note("Added note", "blah", new Date()));
//populateList();
Intent editNoteIntent = new Intent (this, EditNotesActivity.class);
startActivityForResult(editNoteIntent, 1);
return true;
}
// Populate Method
// Populate Method
private void populateList() {
CustomListAdapter customAdapter = new CustomListAdapter(notes);
notesListView.setAdapter(customAdapter);
//CustomAdapter customAdapter = new CustomAdapter();
//notesListView.setAdapter(customAdapter);
最初にダミーデータを使用してapapterを動作させようとしましたが、それでもクラッシュし続けます。
最初の @Overrride の直前にきしみ点を置くと、そこまでは問題なく動作しますが、@Override まで実行するとすぐにクラッシュします。 . 最初のオーバーライドを削除しようとしたところ、次のオーバーライドまでコードが正常に実行され、再びクラッシュしました。
私は一日中これを機能させようとしていました.niはC#開発者である私の父にもそれを送りましたが、彼も知りませんでした.
誰かがこれの原因を正確に教えてくれたら、とても感謝しています.
私がダウンロードした例は、私のものと非常によく似たコードを使用しており、正常に動作します。これは例のコードです:
public class CustomAdapter extends BaseAdapter {
private static final String TAG = CustomAdapter.class.getSimpleName();
ArrayList<DataModel> listArray;
public CustomAdapter() {
listArray = new ArrayList<DataModel>(5);
listArray.add(new DataModel("Title1", "Java", new Date()));
listArray.add(new DataModel("name2", "Python", new Date()));
listArray.add(new DataModel("name3", "Django", new Date()));
listArray.add(new DataModel("name4", "Groovy", new Date()));
listArray.add(new DataModel("name5", "Maven", new Date()));
}
@Override
public int getCount() {
return listArray.size(); // total number of elements in the list
}
@Override
public Object getItem(int i) {
return listArray.get(i); // single item in the list
}
@Override
public long getItemId(int i) {
return i; // index number
}
@Override
public View getView(int index, View view, final ViewGroup parent) {
if (view == null) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
view = inflater.inflate(R.layout.single_list_item, parent, false);
}
final DataModel dataModel = listArray.get(index);
TextView title = (TextView) view.findViewById(R.id.title);
title.setText(dataModel.getTitle());
TextView content = (TextView) view.findViewById(R.id.content);
content.setText(dataModel.getContent());
TextView date = (TextView) view.findViewById(R.id.date);
date.setText("" + dataModel.getDate());
return view;
編集1:
LogCat (私は自分のアプリだけにフィルターをかけました):
06-12 15:26:46.359 8851-8851/com.fishingfon.notetakerui
D/dalvikvm: CheckJNI を遅く有効にする 06-12 15:26:46.399
8851-8851/com.fishingfon.notetakerui W/ActivityThread: アプリケーション com.fishingfon .notetakerui はポート 8100 でデバッガーを待機しています... 06-12 15:26:46.409 8851-8851/com.fishingfon.notetakerui
I/System.out: WAIT チャンクを送信しています 06-12 15:26:46.419
8851-8856 /com.fishingfon.notetakerui I/dalvikvm: デバッガーがアクティブです 06-12 15:26:46.614 8851-8851/com.fishingfon.notetakerui
I/System.out: デバッガーが接続されました 06-12 15:26:46.614
8851-8851 /com.fishingfon.notetakerui I/System.out: デバッガーが落ち着くのを待っています... 06-12 15:26:46.814
8851-8851/com.fishingfon.notetakerui I/System.out: デバッガが解決するのを待っています... 06-12 15:26:47.014
8851-8851/com.fishingfon.notetakerui I/System.out: デバッガが解決するのを待っています解決... 06-12 15:26:47.214
8851-8851/com.fishingfon.notetakerui I/System.out: デバッガーが解決するのを待っています... 06-12 15:26:47.289
2137-2137/com.google .android.youtube D/YouTube MDX: 受信したインテント android.intent.action.SCREEN_OFF 06-12 15:26:47.414
8851-8851/com.fishingfon.notetakerui I/System.out: デバッガが解決するのを待っています... 06 -12 15:26:47.614
8851-8851/com.fishingfon.notetakerui I/System.out: デバッガーが落ち着くのを待っています... 06-12 15:26:47.814
8851-8851/com.fishingfon.notetakerui I/System.out: デバッガーが解決しました (1315) 06-12 15:26:48.149
8851-8851/com.fishingfon.notetakerui D/AndroidRuntime: VM のシャットダウン 06-12 15: 26:48.149 8851-8851/com.fishingfon.notetakerui
W/dalvikvm: threadid=1: キャッチされない例外で終了するスレッド (group=0x40f4d930) 06-12 15:26:48.169
209 8851-8851/com.fishingfon.notetakerui I/プロセス: シグナルを送信しています。PID: 8851 SIG: 9
編集2:
新しいアダプター コード:
class CustomListAdapter extends BaseAdapter {
Context mContext;
// List <Note> notesR = new ArrayList<Note>();
ArrayList<Note> notesR;
public CustomListAdapter (Context context, Object notes) {
mContext = context;
// notesR = = notes;
notesR = new ArrayList<Note>(3);
notesR.add(new Note("Hello", "bye", new Date()));
notesR.add(new Note("Hello", "bye", new Date()));
notesR.add(new Note("Hello", "bye", new Date()));
}
@Override
public int getCount() {
return notesR.size();
}
@Override
public Object getItem(int position) {
return notesR.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
// This method is called to draw each row of the list
@Override
public View getView(int position, View convertView, final ViewGroup parent) {
View vi = convertView;
if (vi == null) {
LayoutInflater inflater;
// inflater = LayoutInflater.from(parent.getContext());
vi = View.inflate(mContext, R.layout.item_list, null);
}
final Note noteModel = notesR.get(position);
TextView date = (TextView) vi.findViewById(R.id.date);
date.setText("" + noteModel.getDate());
TextView title = (TextView) vi.findViewById(R.id.title);
title.setText(noteModel.getTitle());
TextView content = (TextView) vi.findViewById(R.id.content);
content.setText(noteModel.getNote());
return vi;
よろしくお願いします コーリー乾杯