Как изменить значения во втором макете в том же действии?

Мой сценарий заключается в том, что у меня есть действие, которое показывает курсор, хранящийся в базе данных SQLite. Основной макет содержит текстовое представление вверху и список. И затем я использую simplecursoradapter для заполнения курсора в listadapter и помещаю listadapter в список. simplecursoradapter использует другой макет. Теперь проблема в том, что когда я использую simplecursoradapter, я вывожу в список три столбца, например: название товара, дату и цену. Это нормально, если я не изменю эти значения.

На самом деле я хочу добавить строку к цене и сформировать новую строку, такую ​​как знак валюты. Насколько я понимаю, мы можем установить ContentView только для одного макета, а не для двух макетов. Я также пытался заполнить новый макет и установить значение, но не удалось

LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); Просмотр textEntryView = inflater.inflate(R.layout.itemlist, null); Цена TextView = (TextView) textEntryView.findViewById(R.id.price); цена.setText(валюта + c.getString(4).toString());

Даже нет проблем с синтаксисом и запуском приложений. Но когда я запускаю приложение и проверяю список, цена по-прежнему показывает только цену без добавления знака валюты. Я могу добавить знак валюты только под основной макет, а не второй макет, используемый в simplecursoradapter.

На самом деле валюта выбирается в настройках пользователя, и я использую sharedpreference для получения ее значения и добавления к значению цены в курсоре. Кажется, что simplecursoradapter использует другой макет, поэтому не может этого сделать.

У кого-нибудь есть идеи по этому делу?

Я был бы признателен, если бы для аналогичного подхода были предоставлены методы и коды.

Спасибо !!


person Tom Cheung    schedule 19.12.2010    source источник


Ответы (2)


Я не уверен, что понимаю ваш вопрос на 100%, так что это может быть не совсем тот ответ, который вы ищете.

Если вы хотите управлять тем, как макет элементов выглядит в представлении списка, вам следует создать собственную реализацию ArrayAdapter:

ListAdapter, который управляет ListView, поддерживаемым массивом произвольных объектов. (...) Чтобы использовать что-то другое, кроме TextViews, для отображения массива, например, ImageViews, или чтобы некоторые данные, помимо результатов toString(), заполнили представления, переопределите getView(int, View, ViewGroup) для возврата типа вид, который вы хотите.

Если вы просто погуглите пример пользовательского адаптера массива, вы должны найти достаточно примеров, показывающих вы как реализовать это. Два таких примера:

Удачи :)

person Julian    schedule 19.12.2010
comment
Спасибо за ответ. Но кажется, что ваш ответ не то, что я хочу. Может быть, я попытаюсь объяснить более понятно. У меня есть активность, которая содержит текстовое представление сверху, а список находится под текстовым представлением. Это основной макет. И затем я использую simplecursoradapter и заполняю данные курсора в listadapter и помещаю listadapter в список. Проблема в том, что я не знаю, как получить данные и изменить текстовое представление, используемое simplecursoradapter. listadapter = new SimpleCursorAdapter(this,R.layout.itemlist,listcursor,new String[]{item,time,price},new int[]{R.id.item,R.id.date,R.id.price} ); - person Tom Cheung; 19.12.2010
comment
Я хочу получить данные о цене в курсоре, цена - это столбец в курсоре. А затем добавьте знак валюты к цене и отобразите в списке. В моем списке он содержит данные курсора. Каждая запись содержит товар, дату и цену. Но, насколько я понимаю, каждое действие может устанавливать ContentView только для одного макета, а не для двух. Можно ли получить столбец в курсоре, используемый simplecursoradapter, добавить строку в столбец и отобразить ее в виде списка, но без изменения содержимого столбца курсора? - person Tom Cheung; 19.12.2010
comment
Например, одна запись в курсоре в столбце цены равна 4000, но я хочу добавить знак валюты, например $, чтобы сформировать 4000 долларов, но столбец цены по-прежнему хранит 4000 в базе данных sqlite, отображаемый только как 4000 долларов в списке. На самом деле список выше в simplecursoradapter содержит три текстовых представления. Надеюсь, вы понимаете, что я хочу сделать сейчас, спасибо !! - person Tom Cheung; 19.12.2010
comment
@Tom Cheung: я все еще уверен, что то, что вы пытаетесь сделать, можно легко сделать с помощью пользовательской реализации ArrayAdapter. Я рекомендую вам немного погуглить и прочитать по этому вопросу, тогда у вас не должно возникнуть особых проблем с этим. И в качестве примечания: если у вас есть разъяснения, вам следует обновить свой исходный вопрос, а не писать три длинных комментария (чтобы другим людям, читающим ваш вопрос, было проще получить полную картину). - person Julian; 19.12.2010

Наконец, я использовал bindview для решения своей проблемы. В своем вопросе я уже упоминал, что использую simplecursoradapter для получения данных из SQLiteDB, а не из массива. Я знаю, что arrayadapter работает, но он не работает для SQLite эффективно. Прежде чем я расширил базовый адаптер, чтобы создать свой собственный, чтобы добавить пользовательские представления в текстовые представления. Это работает, но слишком медленно, если данных много. Таким образом, simplecursoradapter более эффективен.

Я расширил simplecursoradapter и переопределил bindview для своих целей. Он работает для того, что мне нужно.

Спасибо за вашу помощь и ссылку для arrayadapter

person Tom Cheung    schedule 22.12.2010