Урок 49. SimpleAdapter. Методы SetViewText и SetViewImage

Обсуждение уроков
Alex_sh
Сообщения: 9
Зарегистрирован: 04 фев 2013, 12:10

Re: Урок 49. SimpleAdapter. Методы SetViewText и SetViewImag

Сообщение Alex_sh » 01 мар 2013, 11:04

Спасибо! Недоглядел, надо быть внимательнее в след. раз

Аватара пользователя
dmitriy4leex
Сообщения: 4
Зарегистрирован: 29 июн 2013, 14:45

Re: Урок 49. SimpleAdapter. Методы SetViewText и SetViewImag

Сообщение dmitriy4leex » 29 июн 2013, 14:51

Напишите пожалуйста, в двух словах описание данного метода:

int i = Integer.parseInt(text);

Как я понимаю, берётся String-значение text из v (TextView) и конвертируется в Integer???

Спасибо

xr0m
Сообщения: 131
Зарегистрирован: 06 апр 2013, 14:01

Re: Урок 49. SimpleAdapter. Методы SetViewText и SetViewImag

Сообщение xr0m » 29 июн 2013, 15:06

Именно так. Просто конвертируется строка в целое число.

Update: нет не так ) Значение не берется из v, параметр text мы передаем сами, это то, что мы хотим вставить в наш ViewText.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Урок 49. SimpleAdapter. Методы SetViewText и SetViewImag

Сообщение Mikhail_dev » 05 июл 2013, 12:04

$01ny$hko писал(а):Каким образом в следующей строчке

Код: Выделить всё

public static final String[] ball = new String[] {"0 баллов", "+2 б.", "+1 б.", "5 б." };
можно вместо "0 баллов" вставить значение из preferences, сохранённое вот так?

Код: Выделить всё

final String SaveBalance = "balance"
rezak90 писал(а):никак =)
А вот можно!
Приятная, маленькая хитрость массивов

ensto
Сообщения: 3
Зарегистрирован: 04 окт 2012, 23:04
Контактная информация:

Re: Урок 49. SimpleAdapter. Методы SetViewText и SetViewImag

Сообщение ensto » 05 авг 2013, 23:07

Код: Выделить всё

img = (values[i] > 0) ? positive : negative;
Объясните доступно код в этой строчке. Спасибо.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 49. SimpleAdapter. Методы SetViewText и SetViewImag

Сообщение Foenix » 06 авг 2013, 00:09

это такой хитрый оператор условия, чтоб не писать несколько строчек
http://javascript.ru/cond
т.е. если величина положительная в данной переменной (элемент массива) values то присвоить переменной img значение переменной positive, а иначе записать в нее значение переменной negative
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Урок 49. SimpleAdapter. Методы SetViewText и SetViewImag

Сообщение Mikhail_dev » 06 авг 2013, 00:13

Учите Java, господа.
Инная, я понимаю, что в JavaScript тоже самое, но людей можешь смутить данным действием =)

murray
Сообщения: 2
Зарегистрирован: 20 авг 2013, 17:51

Re: Урок 49. SimpleAdapter. Методы SetViewText и SetViewImag

Сообщение murray » 25 авг 2013, 15:42

А в каких файлах проекта я могу посмотреть, как выглядят стандартные изображения? Например, android.R.drawable.arrow_down_float

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 49. SimpleAdapter. Методы SetViewText и SetViewImag

Сообщение rezak90 » 25 авг 2013, 16:20

murray писал(а):А в каких файлах проекта я могу посмотреть, как выглядят стандартные изображения? Например, android.R.drawable.arrow_down_float
https://android.googlesource.com/platfo ... re/res/res
R.id.team
Политика на форуме запрещена

denis_po3
Сообщения: 14
Зарегистрирован: 01 ноя 2013, 15:45

Re: Урок 49. SimpleAdapter. Методы SetViewText и SetViewImag

Сообщение denis_po3 » 01 ноя 2013, 16:07

Если в массиве данных values[] в качестве первого значения указать 0, то цвет текста и фон для него получаются синего или красного цвета. Ноль на другой позиции не дает такого эффекта. Избавился от этого явления инициализацией цвета, но почему так происходит не разобрался.

Код: Выделить всё

public void setViewText(TextView v, String text) {
			// метод супер-класса, который вставляет текст
			super.setViewText(v, text);
			// если нужный нам TextView, то разрисовываем
			if (v.getId() == R.id.tvValue) {
				int i = Integer.parseInt(text);
				v.setTextColor(Color.WHITE);
				if (i < 0)
					v.setTextColor(Color.RED);
				else if (i > 0)
					v.setTextColor(Color.GREEN);
			}
		}

		@Override
		public void setViewImage(ImageView v, int value) {
			// метод супер-класса
			super.setViewImage(v, value);
			// разрисовываем ImageView
			v.setBackgroundColor(Color.TRANSPARENT);
			if (value == negative)
				v.setBackgroundColor(Color.RED);
			else if (value == positive)
				v.setBackgroundColor(Color.GREEN);
		}
Вложения
shot.PNG
shot.PNG (55.53 КБ) 11802 просмотра

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 49. SimpleAdapter. Методы SetViewText и SetViewImag

Сообщение Foenix » 02 ноя 2013, 23:18

где в коде массив values фигурирует? не вижу
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

denis_po3
Сообщения: 14
Зарегистрирован: 01 ноя 2013, 15:45

Re: Урок 49. SimpleAdapter. Методы SetViewText и SetViewImag

Сообщение denis_po3 » 04 ноя 2013, 10:28

Foenix писал(а):где в коде массив values фигурирует? не вижу
Я вставил только часть кода с моими исправлениями. Полный код вот:

Код: Выделить всё

public class MainActivity extends Activity {

  // имена атрибутов для Map
  final String ATTRIBUTE_NAME_TEXT = "text";
  final String ATTRIBUTE_NAME_VALUE = "value";
  final String ATTRIBUTE_NAME_IMAGE = "image";

  // картинки для отображения динамики 
  final int positive = android.R.drawable.arrow_up_float;
  final int negative = android.R.drawable.arrow_down_float;
  
  ListView lvSimple;

  /** Called when the activity is first created. */
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // массив данных
    int[] values = { 8, 4, -3, 2, -5, 0, 3, -6, 1, -1 };

    // упаковываем данные в понятную для адаптера структуру
    ArrayList<Map<String, Object>> data = new ArrayList<Map<String, Object>>(
        values.length);
    Map<String, Object> m;
    int img = 0;
    for (int i = 0; i < values.length; i++) {
      m = new HashMap<String, Object>();
      m.put(ATTRIBUTE_NAME_TEXT, "Day " + (i + 1));
      m.put(ATTRIBUTE_NAME_VALUE, values[i]);
      if (values[i] == 0) img = 0; else
        img = (values[i] > 0) ? positive : negative;
      m.put(ATTRIBUTE_NAME_IMAGE, img);
      data.add(m);
    }

    // массив имен атрибутов, из которых будут читаться данные
    String[] from = { ATTRIBUTE_NAME_TEXT, ATTRIBUTE_NAME_VALUE,
        ATTRIBUTE_NAME_IMAGE };
    // массив ID View-компонентов, в которые будут вставлять данные
    int[] to = { R.id.tvText, R.id.tvValue, R.id.ivImg };

    // создаем адаптер
    MySimpleAdapter sAdapter = new MySimpleAdapter(this, data,
        R.layout.item, from, to);

    // определяем список и присваиваем ему адаптер
    lvSimple = (ListView) findViewById(R.id.lvSimple);
    lvSimple.setAdapter(sAdapter);
  }

  class MySimpleAdapter extends SimpleAdapter {

    public MySimpleAdapter(Context context,
        List<? extends Map<String, ?>> data, int resource,
        String[] from, int[] to) {
      super(context, data, resource, from, to);
    }

    @Override
    public void setViewText(TextView v, String text) {
      // метод супер-класса, который вставляет текст
      super.setViewText(v, text);
      // если нужный нам TextView, то разрисовываем 
      if (v.getId() == R.id.tvValue) {
        int i = Integer.parseInt(text);
        if (i < 0) v.setTextColor(Color.RED); else
          if (i > 0) v.setTextColor(Color.GREEN);
      }
    }

    @Override
    public void setViewImage(ImageView v, int value) {
      // метод супер-класса
      super.setViewImage(v, value);
      // разрисовываем ImageView
      if (value == negative) v.setBackgroundColor(Color.RED); else
        if (value == positive) v.setBackgroundColor(Color.GREEN);
    }
  }
}

snowkam
Сообщения: 162
Зарегистрирован: 21 мар 2013, 11:22

Re: Урок 49. SimpleAdapter. Методы SetViewText и SetViewImag

Сообщение snowkam » 05 дек 2013, 16:28

Добрый день!
Подскажите как получить _id cursor в методе setViewText(TextView v, String text)

[syntax=java]
class MySimpleCursorAdapter extends SimpleCursorAdapter {
long cursor_id;
int red = getResources().getColor(R.color.Red);

public MySimpleCursorAdapter(Context context, int layout, Cursor c,
String[] from, int[] to) {
super(context, layout, c, from, to);
}

@Override
public void setViewText(TextView v, String text) {

super.setViewText(v, text);
if(v.getId()== R.id.txt_name_culture_item){
// получить _id cursor
}
}


}
[/syntax]

Спасибо

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 49. SimpleAdapter. Методы SetViewText и SetViewImag

Сообщение Foenix » 05 дек 2013, 17:26

Cursor cursor = (Cursor) getItem(position);
попробуй так
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

ltsolo
Сообщения: 3
Зарегистрирован: 05 фев 2014, 11:51

Re: Урок 49. SimpleAdapter. Методы SetViewText и SetViewImag

Сообщение ltsolo » 05 фев 2014, 11:54

В layout файле указано:
[syntax=xml]
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_marginTop="5dp"
android:orientation="horizontal">

---- blah-blah ----

</LinearLayout>
</LinearLayout>
[/syntax]

А зачем такое? Зачем внутрь layout класть ещё один layout единственным элементом? :shock:

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 49. SimpleAdapter. Методы SetViewText и SetViewImag

Сообщение altwin » 05 фев 2014, 12:10

ltsolo писал(а):В layout файле указано:
[syntax=xml]
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_marginTop="5dp"
android:orientation="horizontal">

---- blah-blah ----

</LinearLayout>
</LinearLayout>
[/syntax]

А зачем такое? Зачем внутрь layout класть ещё один layout единственным элементом? :shock:
он не единственный, там же написанно: " ---- blah-blah ---- " :)
Изображение

ltsolo
Сообщения: 3
Зарегистрирован: 05 фев 2014, 11:51

Re: Урок 49. SimpleAdapter. Методы SetViewText и SetViewImag

Сообщение ltsolo » 05 фев 2014, 12:15

altwin писал(а):он не единственный, там же написанно: " ---- blah-blah ---- " :)
Окей, поприкалывались и будет. А теперь серьёзно, зачем внутри одного layout другой layout единственным элементом?

Во внутренеем layout всё равно, что лежит, это не важно. Но во внешнем только один layout и лежит. Вот и странно это.

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 49. SimpleAdapter. Методы SetViewText и SetViewImag

Сообщение altwin » 05 фев 2014, 12:47

ltsolo писал(а):
altwin писал(а):он не единственный, там же написанно: " ---- blah-blah ---- " :)
Окей, поприкалывались и будет. А теперь серьёзно, зачем внутри одного layout другой layout единственным элементом?

Во внутренеем layout всё равно, что лежит, это не важно. Но во внешнем только один layout и лежит. Вот и странно это.
Если это сделали, значит это кому -то нужно. И если вы не встречали задачи в которой это нужно, то это не говорит ни о чем, кроме того, что вы не встречали такой задачи.
Как минимум я могу предположить, что это не весь layout там есть / будут динамически добавленны другие элементы, а может автор укажет padding и ему так просто удобно установить отступ от границы экрана, а может в background будут разные картинки и фон приложения динамически будет меняться устанавливая прозрачность, да какая разница, никто не будет делать что то просто так, хотя бы потому, что это занимает время, вообще варриантов может быть очень много, а вот зачем вы задаете такой вопрос я так и не понял, вам просто интересно? это бесполезная информация если вам это не нужно сейчас - всеравно забудете, когда понадобится просто сделаете и все поймете. Лучше почитайте следующий урок ;)

P.S. даже если задача была просто руками вложить один layout в другой - это правильный путь, потому, что тот, кто это сделал уже никогда не забудет, что так бывает...
Изображение

ltsolo
Сообщения: 3
Зарегистрирован: 05 фев 2014, 11:51

Re: Урок 49. SimpleAdapter. Методы SetViewText и SetViewImag

Сообщение ltsolo » 05 фев 2014, 13:36

altwin писал(а):Если это сделали, значит это кому -то нужно.
Вот и тут так, если кто-то задаёт вопрос, значит это ему нужно.
altwin писал(а):И если вы не встречали задачи в которой это нужно, то это не говорит ни о чем, кроме того, что вы не встречали такой задачи.
Как минимум я могу предположить, что это не весь layout
Потому и спрашиваю "зачем?". На вырост, просто рудимент или для этого есть какие-то более веские причины. Не хотелось бы использовать уроки как "делай так" и переходить от урока к уроку. Хотелось бы разобраться во всех тонкостях.

В общем, как и следовало ожидать объемлющий 1ayout ни для чего не нужен. Выставив android:paddingTop и android:paddingBottom во внутреннем можно смело убирать внешний, разницы визуально не будет.

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 49. SimpleAdapter. Методы SetViewText и SetViewImag

Сообщение altwin » 05 фев 2014, 13:54

ltsolo писал(а): В общем, как и следовало ожидать объемлющий 1ayout ни для чего не нужен. Выставив android:paddingTop и android:paddingBottom во внутреннем можно смело убирать внешний, разницы визуально не будет.
Опять же padding задает отступ содержимого, а margin от наружного элементов. То о чем я вам и говорил, вам это не нужно сейчас и вы искуственную проблему создаете себе потому и не понимаете. Не имеет значение что в данном случае margin визуально дает тот же эффект, я вам по каждому уроку могу по 20 способов показать как добиться того же другим способом. Margin работает принципиально иначе и только в данном конкретном(искуственном) случае ведет себя визуально так же. Как минимум задавая padding я задаю для всех, в том числе отмеченных, как bla, blla, bla, а margin нужно указывать каждому, да и опять же -это не важно, а всеголишь способ выдающий тот же результат в конкретном примере.
Вложение такое даже пустых linearLayout можно оправдать даже глубокой убежденностью автора, что ему это потребуется завтра, в этом нет ошибки, а причину я так же как и вы в данном случае не знаю, но я не автор и знать ее не должен. Ваша задача читая уроки не привязываться к конкретному искуственному примеру, он всеголишь показывает конкретную возможность - вложение элемента и никто не пытался доказать что в данном случае это необходимо, а наоборот понять, как это сделать иначе и что будет если поступить по другому. Автор выполнил свою задачу - вложил элемент а зачем - для того, чтобы его вложить -это была цель наверно.

P.S. если вам интересны цели, когда и что делают, чтобы было "кошерно", вам стоит смотреть совсем другие примеры кода, например эти: https://github.com/android
Изображение

Ответить