Проблемы с onListItemClick (mNotesCursor)
Я использую учебник developer.android Notepad ( http://developer.android.com/training/notepad/notepad-ex2.html) для создания Noteapp, но у меня проблемы с onItemClick, и я не могу понять, где проблема лежит.
Мой код
public class MainActivity extends ListActivity {
private static final int ACTIVITY_CREATE=0;
private static final int ACTIVITY_EDIT=1;
public static final int INSERT_ID = Menu.FIRST;
private static final int DELETE_ID = Menu.FIRST + 1;
private int mNoteNumber = 1;
private NotesDbAdapter mDbHelper;
public static String notesstring;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDbHelper = new NotesDbAdapter(this);
mDbHelper.open();
fillData();
registerForContextMenu(getListView());
ImageButton b = (ImageButton) findViewById(R.id.add);
b.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
//Intent i = new Intent(MainActivity.this, NoteScreen.class);
//startActivity(i);
createNote();
}
});
}
private void fillData() {
Cursor c = mDbHelper.fetchAllNotes();
startManagingCursor(c);
String[] from = new String[] { NotesDbAdapter.KEY_TITLE };
int[] to = new int[] { R.id.text1 };
SimpleCursorAdapter notes =
new SimpleCursorAdapter(this, R.layout.notes_row, c, from, to);
setListAdapter(notes);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
boolean result = super.onCreateOptionsMenu(menu);
menu.add(0, INSERT_ID, 0, R.string.menu_insert);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.mainactivitymenu, menu);
return result;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId() ) {
case INSERT_ID:
createNote();
return true;
}
switch (item.getItemId()) {
case R.id.action_settings:
Intent i = new Intent(MainActivity.this, Settings.class);
startActivity(i);
return true;
/*case R.id.action_new:
Intent e = new Intent(MainActivity.this, NoteScreen.class);
startActivity(e);
return true;
*/
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.add(0, DELETE_ID, 0, R.string.menu_delete);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
switch(item.getItemId()) {
case DELETE_ID:
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
mDbHelper.deleteNote(info.id);
fillData();
return true;
}
return super.onContextItemSelected(item);
}
private void createNote() {
Intent i = new Intent (this, NoteScreen.class);
startActivityForResult(i, ACTIVITY_CREATE);
/*String noteName = "Note " + mNoteNumber++;
mDbHelper.createNote(noteName, "");
fillData();*/
}
И это та часть, где ошибки:
@Override
protected void onListItemClick(ListView list, View v, int position, long id) {
super.onListItemClick(list, v, position, id);
Cursor c = mNotesCurser;
c.moveToPosition(position);
Intent i = new Intent(this, NoteScreen.class);
i.putExtra(NotesDbAdapter.KEY_ROWID, id);
i.putExtra(NotesDbAdapter.KEY_TITLE, c.getString(
c.getColumnIndexOrThrow(NotesDbAdapter.KEY_TITLE)));
i.putExtra(NotesDbAdapter.KEY_BODY, c.getString(
c.getColumnIndexOrThrow(NotesDbAdapter.KEY_BODY)));
startActivityForResult(i, ACTIVITY_EDIT);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
Bundle extras = intent.getExtras();
switch(requestCode) {
case ACTIVITY_CREATE:
String title = extras.getString(NotesDbAdapter.KEY_TITLE);
String body = extras.getString(NotesDbAdapter.KEY_BODY);
mDbHelper.createNote(title, body);
fillData();
break;
case ACTIVITY_EDIT:
Long rowId = extras.getLong(NotesDbAdapter.KEY_ROWID);
if (rowId != null) {
String editTitle = extras.getString(NotesDbAdapter.KEY_TITLE);
String editBody = extras.getString(NotesDbAdapter.KEY_BODY);
mDbHelper.updateNote(rowId, editTitle, editBody);
}
fillData();
break;
}
}
}
mNotesCurser не может быть преобразован в переменную
Есть идеи, как это исправить?
2 ответа
+ Изменить
protected void onListItemClick(ListView 1, View v, int position, long id)
в
protected void onListItemClick(ListView list, View v, int position, long id)
и использовать list
переменная для связи с ListView.
Примечание: никогда не используйте числа в качестве одного символа для имени переменной. Ява ограничивает это.
И прежде чем приступить к созданию приложений для Android, я рекомендую вам прочитать хотя бы одну книгу о Java.
Замените свой код на:
@Override
protected void onListItemClick(ListView listView, View v, int position, long id) {
super.onListItemClick(listView, v, position, id);
Java не позволяет объявлять переменные только с числами.
Имя переменной может быть любым допустимым идентификатором - последовательность символов Unicode неограниченной длины, начинающаяся с буквы, знака доллара "$" или символа подчеркивания "_".