2013-11-22 2 views
1

Я использую developer.android Notepad учебник (http://developer.android.com/training/notepad/notepad-ex2.html) создать Noteapp, , но у меня есть проблемы с onItemClick и я не могу понять, где проблема.Проблемы с onListItemClick (mNotesCursor)

Мой код

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.

Примечание: никогда не использует числа в качестве одного символа для имени переменной. Java ограничивает это.

И прежде чем приступать к созданию приложений для Android, я рекомендую вам прочитать хотя бы одну книгу о Java.

+0

Спасибо за ответ, это работает, но теперь я получаю сообщение об ошибке в Curso c = mNotesCurser; : mNotesCursor не может быть разрешен к переменной. Любая идея? – mind

+0

Черт ... Прочитайте книги человека. Вы не понимаете простых вещей. В этом случае вы будете задавать любые проблемы, которые у вас есть. Читайте книги человек ... Читайте книги .. Для начала - о синтаксисе. –

+0

Да ладно, дайте мне подсказку – mind

1

Заменить код:

@Override 
protected void onListItemClick(ListView listView, View v, int position, long id) { 
    super.onListItemClick(listView, v, position, id); 

Java doesn't allow объявлять переменные только с числами.

Имя переменной может быть любой допустимый идентификатор - неограниченное длины последовательность букв Unicode и цифр, начинается с буквы, то знак доллара «$», или символ подчеркивания «_».

Смежные вопросы