1

最初の Android アプリでカスタム アダプターを動作させようとしています。

これは私のアプリのコードです:

CustomAdapter クラス:

class CustomListAdapter extends BaseAdapter {




Context mContext;
List<String> notes;


public CustomListAdapter (Context context, List notes) {
    mContext = context;
    this.notes = notes;

}


@Override
public int getCount() {
    return notes.size();

}

@Override
public String getItem(int i) {
    return notes.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 = notes.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());
    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();
        //populateLateCustomAdapter();

    }

}



public 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);
    ListView 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) {


    Intent editNoteIntent = new Intent (this, EditNotesActivity.class);
    startActivityForResult(editNoteIntent, 1);


    return true;


}




    // Populate Method
    private void populateList() {

        CustomListAdapter CustomAdapter = new CustomListAdapter(this, notes);
        notesListView.setAdapter(CustomAdapter);


    }

これは私のノートクラスです:

public class Note implements Serializable {

private String title;
private String note;
private Date date;

// Constructor
public Note(String title, String note, Date date) {
    this.title = title;
    this.note = note;
    this.date = date;
}



// Title Getter and Setter
public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}




// Note Getter and Setter
public String getNote() {
    return note;
}

public void setNote(String note) {
    this.note = note;
}




// Date Getter and Setter
public Date getDate() {
    return date;
}

public void setDate(Date date) {
    this.date = date;
}

}

私が抱えている問題は、

    final Note noteModel = notes.get(index);

カスタム アダプター クラスの最後に、「互換性のない型、検出: 文字列、必須: 注」というエラーが表示されます。

エラーの意味はわかっていますが、インターネットで見つけたこの例を部分的にコピーしています。

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;

と:

public class DataModel {
private String title;
private String content;
private Date date;

public DataModel(String title, String content, Date date) {
    this.title = title;
    this.content = content;
    this.date = date;
}


public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

public String getContent() {
    return content;
}

public void setContent(String content) {
    this.content = content;
}

public Date getDate() {
    return date;
}

public void setDate(Date date) {
    this.date = date;
}

その例では、人は私がやろうとしているのと同じことをしますが、そのコードは実行されます.

私はこれを2日間理解しようとしていますが、うまくいかないようです。これは私のアプリの他のいくつかのクラスですが、関連性があるとは思わないので、上に投稿していません。

誰かがこの問題を回避する方法を教えてくれたら、とても感謝しています。

前もって感謝します

乾杯コーリー

4

1 に答える 1

2

クラスで宣言を からList<String> notes;に変更List<Note> notes;しますCustomListAdapter

List<Note> notes;

上記の宣言は、List包含Noteオブジェクトを宣言します。

于 2013-06-11T11:06:55.213 に答える