Clistview щелкнул элемент перейти к другой деятельности

-4

Я хочу передать свой идентификатор элемента в просмотре по списку другим действиям с помощью намерения. Как я могу это сделать?

Теги:
android-intent

1 ответ

0

Вы получаете идентификатор и добавляете его в Intent как Extra, используя соответствующий (длинный) putExtra с подходящим ключом (первый параметр).

В другой операции вы получаете Intent, а затем получаете значение из Extra, используя getLongExtra, используя тот же ключ (первый параметр), отмечая, что значением по умолчанию должно быть значение (например, -1), которое не будет идентификатором.

Рабочий пример

Ниже приведен рабочий пример:

Помощник по базам данных DBOpenHelper.java

public class DBOpenHelper extends SQLiteOpenHelper {

    public static final String DBNAME = "notes.db";
    public static final int DBVERSION = 1;
    public static final String TBL_NOTE = "note_table";
    public static final String COL_NOTE_ID = BaseColumns._ID;
    public static final String COL_NOTE_TEXT = "note_text";

    private final String create_table = "CREATE TABLE IF NOT EXISTS " + TBL_NOTE + "(" +
            COL_NOTE_ID + " INTEGER PRIMARY KEY, " +
            COL_NOTE_TEXT + " TEXT " +
            ")";
    private static final String drop_table = "DROP TABLE IF EXISTS " + TBL_NOTE;

    public DBOpenHelper(Context context) {
        super(context, DBNAME, null, DBVERSION);
    }

    public void onCreate(SQLiteDatabase db) {
        db.execSQL(create_table);
    }

    public void onUpgrade(SQLiteDatabase db, int version_old, int version_new) { }

    public long addNote(String note) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues cv = new ContentValues();
        cv.put("NOTE_TEXT",note);
        return db.insert("note_table",null,cv);
    }

    public Cursor getAllNotes() {
        SQLiteDatabase db = this.getWritableDatabase();
        return db.query(TBL_NOTE,null,null,null,null,null,null);
    }
}
  • Инстанцированный экземпляр этого используется для:
    • откройте базу данных (в примере она называется notes.db), она создаст базу данных, если она не существует.
    • добавить данные с помощью метода addNote.
    • вернуть курсор, содержащий все заметки, с помощью метода getAllNotes.

Начальная активность MainActivity.java: -

public class MainActivity extends AppCompatActivity {

    private ListView mListView;
    private SimpleCursorAdapter MSCA;
    private Cursor mCsr;
    private DBOpenHelper mDBHelper;

    public static final String INTENTEXTRAKEY_NOTE_ID = "iek_noteid";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mDBHelper = new DBOpenHelper(this);
        mListView = findViewById(R.id.listView);
        addSomeTestData(); //Adds a row every time the App is run (for testing)
        ViewData();
    }

    private void ViewData(){

        mCsr = mDBHelper.getAllNotes();
        if (MSCA == null) {
            MSCA = new SimpleCursorAdapter(
                    this,
                    android.R.layout.simple_list_item_1,
                    mCsr,
                    new String[]{DBOpenHelper.COL_NOTE_TEXT},
                    new int[]{android.R.id.text1},
                    0);
            mListView.setAdapter(MSCA);
            mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    Intent i = new Intent(MainActivity.this,OtherActivity.class);
                    i.putExtra(INTENTEXTRAKEY_NOTE_ID,id);
                    startActivity(i);
                }
            });
        } else {
            MSCA.swapCursor(mCsr);
        }
    }

    private void addSomeTestData() {
        if(DatabaseUtils.queryNumEntries(mDBHelper.getWritableDatabase(),DBOpenHelper.TBL_NOTE) < 1) {
            mDBHelper.addNote("My Note");
            mDBHelper.addNote("Another Note");
            mDBHelper.addNote("Yet Another Note");
            mDBHelper.addNote("And so on.");
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mCsr.close();
    }

    @Override
    public void onResume()
    {
        super.onResume();
        ViewData();
    }
}
  • Эта деятельность: -

    • Добавляет некоторые заметки в базу данных (если их еще нет)
    • Перечисляет все заметки в базе данных
    • устанавливает onItemClickListener для вызова действия OtherActivity, передавая идентификатор через IntenExtra.
  • Заметки

    • CursorAdpater (SimpleCursorAdapter) в этом случае идеально подходит, поскольку идентификатор передается в метод onItemClick слушателем. Примечание это требует столбец, названный специфически _id (согласно BaseColumns._ID) и что столбец является псевдонимом столбца RowId.

    • Метод onDestroy был переопределен, чтобы закрыть Курсор, когда закончите с ним (то есть, когда действие будет уничтожено). Это не так важно в начальной деятельности, как это время жизни обычно для всего приложения (более важным является закрытие курсора в иерархически более низких операциях).

    • Метод ViewData управляет одним экземпляром адаптера (т.е. Создает его только тогда, когда он не был создан), а также обновляет ListView. Следовательно, почему он вызывается в переопределенном методе onResume. то есть другое действие может добавить. удалить или обновить базу данных, чтобы ListView обновлялся по возвращении.

Действие, вызванное из начального действия OtherActivity.java

public class OtherActivity extends AppCompatActivity {

    TextView mNoteId;
    Button mDone;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_other);
        mNoteId = this.findViewById(R.id.noteid);
        mDone = this.findViewById(R.id.done);
        mDone.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        Intent i = this.getIntent();
        long id = i.getLongExtra(MainActivity.INTENTEXTRAKEY_NOTE_ID,-1);
        mNoteId.setText(String.valueOf(id));
    }
}
  • Эта деятельность: -
    • устанавливает onClickListener кнопки для возврата к действию вызова/вызова.
    • извлекает идентификатор из Intent Extras, переданного в действие из вызывающего действия, и устанавливает текстовое представление noteid с извлеченным значением (переданным идентификатором).

Результат

Первоначально :-

Изображение 166950

Нажав еще одно примечание: -

Изображение 166951

  • В качестве еще одной заметки было добавлено третье примечание с идентификатором 3
  • 0
    Пожалуйста, скажите мне, что тот же метод применяется в случае передачи идентификатора из списка в список?
  • 0
    Пожалуйста, дайте мне код для объяснения ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню