Как показать один элемент списка ListView в другом Activity

Рейтинг: 0Ответов: 2Опубликовано: 11.04.2015

Есть главная активность. В нем ListView со своим адаптером. Элемент ListView состоит из разных объектов (TextView, Button и т.д).

При нажатии на элемент списка мы переходим на другую активность, в которой должны отобразить именно этот элемент в таком же формате.

Есть шаблон элемента xml откуда адаптер черпает вьюшки.

Вопрос: Есть ли какие нибудь функции, которые могут с этим помочь. Была идея просто передать данные конкретного элемента с адаптера и в новой активности заново построить по этим данным и шаблону View.

Ищу способ проще. Так как кругозор SDK пока не позволяет даже правильно подать запрос в google.

Маленькая схема для представления результата:

Ответы

▲ 2

Просто передаешь intent со всеми параметрами itemview в другую activity.

Для курсора я пользовался такой процедурой:

    public static void putCursorToIntent(Cursor mCurs,Intent intent) {

    for (int idx=0;idx<mCurs.getColumnCount();idx++) {                          
        String columName=mCurs.getColumnName(idx);                          
        switch (mCurs.getType(idx)) {
            case android.database.Cursor.FIELD_TYPE_NULL:
                break;
            case android.database.Cursor.FIELD_TYPE_INTEGER:                                        
                intent.putExtra(columName, mCurs.getLong(idx));                 
                break;
            case android.database.Cursor.FIELD_TYPE_FLOAT:
                intent.putExtra(columName, mCurs.getDouble(idx));                   
                break;
            case android.database.Cursor.FIELD_TYPE_STRING:
                intent.putExtra(columName, mCurs.getString(idx));                   
                break;
            default:                            
        }

    }       
}

Для xml так же можно написать, но сходу нет примера.

▲ 2

У Вас есть несколько вариантов как это сделать, но хотелось бы точнее описание Вашего объекта в списке.

А именно надо ли Вам представление этого объекта в том виде, в котором оно хранится в ListView.

Допустим Вам нужно всего лишь передать строку или число, то Вам всего лишь это и нужно сделать.Но если Вам нужен именно такой объект,например View или Drawable (обычно изображения не передают, а рендарят прямо в новом активити, хотя иногда бывает менее затратно все таки передать объект существующий в памяти).

Обычно алгоритм передачи для обоих случаев одинаков. Есть механизм для взаимодействия между Activity, через тот же объект с помощью которого Вы ее и создаете - Intent.

Вот небольшой пример.

Intent i = new Intent();
i.putExtra("id or tag for object", mObjectToPass);

И соответственно получаем в другом Activity

  Intent i = getIntent();
    YourCustomObject mReceivedObject=(YourCustomObject)i.getParcelableExtra("id or tag for object");

Но Вам следует учесть что Ваш объект должен реализовать интерфейс Paracable или же Serializable. То есть Вы должны написать как следует запаковать и распаковать объект.

О разнице между этими двумя интерфейсами думаю без проблем можно почитать в гугле.

Также передавать можно не только объекты, а и примитивы, строки. Для этого существуют соответствующее методы класса Intent(getStringExtra(),getIntExtra() ...) Тогда Вам уже не надо заниматься упаковкой объектов.

Если есть вопросы задавайте.

З.Ы Такие методы как статические глобальные переменные не рассматриваю, думаю понятно по каким причинам.