Re: Урок 49. SimpleAdapter. Методы SetViewText и SetViewImag
Добавлено: 01 мар 2013, 11:04
Спасибо! Недоглядел, надо быть внимательнее в след. раз
Добро пожаловать на форум сайта
http://forum.startandroid.ru/
$01ny$hko писал(а):Каким образом в следующей строчкеможно вместо "0 баллов" вставить значение из preferences, сохранённое вот так?Код: Выделить всё
public static final String[] ball = new String[] {"0 баллов", "+2 б.", "+1 б.", "5 б." };
Код: Выделить всё
final String SaveBalance = "balance"
А вот можно!rezak90 писал(а):никак =)
Код: Выделить всё
img = (values[i] > 0) ? positive : negative;
https://android.googlesource.com/platfo ... re/res/resmurray писал(а):А в каких файлах проекта я могу посмотреть, как выглядят стандартные изображения? Например, android.R.drawable.arrow_down_float
Код: Выделить всё
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);
}
Я вставил только часть кода с моими исправлениями. Полный код вот: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);
}
}
}
он не единственный, там же написанно: " ---- blah-blah ---- "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 единственным элементом?
Окей, поприкалывались и будет. А теперь серьёзно, зачем внутри одного layout другой layout единственным элементом?altwin писал(а):он не единственный, там же написанно: " ---- blah-blah ---- "
Если это сделали, значит это кому -то нужно. И если вы не встречали задачи в которой это нужно, то это не говорит ни о чем, кроме того, что вы не встречали такой задачи.ltsolo писал(а):Окей, поприкалывались и будет. А теперь серьёзно, зачем внутри одного layout другой layout единственным элементом?altwin писал(а):он не единственный, там же написанно: " ---- blah-blah ---- "
Во внутренеем layout всё равно, что лежит, это не важно. Но во внешнем только один layout и лежит. Вот и странно это.
Вот и тут так, если кто-то задаёт вопрос, значит это ему нужно.altwin писал(а):Если это сделали, значит это кому -то нужно.
Потому и спрашиваю "зачем?". На вырост, просто рудимент или для этого есть какие-то более веские причины. Не хотелось бы использовать уроки как "делай так" и переходить от урока к уроку. Хотелось бы разобраться во всех тонкостях.altwin писал(а):И если вы не встречали задачи в которой это нужно, то это не говорит ни о чем, кроме того, что вы не встречали такой задачи.
Как минимум я могу предположить, что это не весь layout
Опять же padding задает отступ содержимого, а margin от наружного элементов. То о чем я вам и говорил, вам это не нужно сейчас и вы искуственную проблему создаете себе потому и не понимаете. Не имеет значение что в данном случае margin визуально дает тот же эффект, я вам по каждому уроку могу по 20 способов показать как добиться того же другим способом. Margin работает принципиально иначе и только в данном конкретном(искуственном) случае ведет себя визуально так же. Как минимум задавая padding я задаю для всех, в том числе отмеченных, как bla, blla, bla, а margin нужно указывать каждому, да и опять же -это не важно, а всеголишь способ выдающий тот же результат в конкретном примере.ltsolo писал(а): В общем, как и следовало ожидать объемлющий 1ayout ни для чего не нужен. Выставив android:paddingTop и android:paddingBottom во внутреннем можно смело убирать внешний, разницы визуально не будет.