Урок 50. SimpleAdapter. Используем ViewBinder

Обсуждение уроков
lavan
Сообщения: 27
Зарегистрирован: 27 ноя 2012, 20:25

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение lavan » 27 ноя 2012, 22:40

Спасибо, разобрался

dcbp
Сообщения: 24
Зарегистрирован: 26 ноя 2012, 10:34

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение dcbp » 06 фев 2013, 15:24

Друзья, а можно в биндере получить position? Например для работы с исходным массивом.

Аватара пользователя
dens
Сообщения: 47
Зарегистрирован: 03 фев 2013, 00:14

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение dens » 06 фев 2013, 16:29

Походу нет.
Если нельзя, то можно, попробовать обойти это, если передавать в качестве элементов не простейшие типы (инты и строки), а объекты, в которые зашивать позицию и значение (хэш, например). Я бы так сделал, наверное.

dcbp
Сообщения: 24
Зарегистрирован: 26 ноя 2012, 10:34

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение dcbp » 06 фев 2013, 18:26

Вряд ли получится. Для того чтобы их передать их надо знать, а если в процессе мы например удалим элемент? или наоборот добавим? Исходный массив поменяется и поменяется позиция....

Аватара пользователя
dens
Сообщения: 47
Зарегистрирован: 03 фев 2013, 00:14

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение dens » 06 фев 2013, 20:00

Ну да придётся тогда и обновление элементов делать при этом.
Но если надо, то ничего не поделать.

perelygin
Сообщения: 4
Зарегистрирован: 24 июн 2012, 20:54

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение perelygin » 10 фев 2013, 19:16

Доброго времени суток.
Скажите, а можно ли использовать Binder для того что бы динамически добавлять элементы в размету для элемента списка.
Например, в список выведен перечень товаров(название и картинка).
В зависимости от типа товара, нужно в разметке для элемента списка отражать тот или иной набор .
Т.е. для типа "сыпучие товары", отражать объем и вес.
Для типа "летучие товары", отражать запах , цвет, ядовитость(т.е. уже три параметра, а на два)

Аватара пользователя
dens
Сообщения: 47
Зарегистрирован: 03 фев 2013, 00:14

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение dens » 11 фев 2013, 00:19

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

Sintel
Сообщения: 4
Зарегистрирован: 09 май 2013, 02:57

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение Sintel » 10 май 2013, 23:46

Что написать вместо "ЧТО_ТО" в данном коде, чтобы некоторые progressbar'ы были видимы, а некоторые невидимы.
Например 5 и 6 видимы, остальные нет.

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

public boolean setViewValue(View view, Object data, String textRepresentation) {
    			
    			int i = 0;
		          switch (view.getId()) {
		          // LinearLayout
		          // ProgressBar  
		          case R.id.pvProgress1:
		        	i = ((Integer) data).intValue();
			        ((ProgressBar)view).setProgress(i);
			        if ("ЧТО_ТО" || "ЧТО_ТО")
			           ((ProgressBar)view).setVisibility(View.VISIBLE);
			        else
			            ((ProgressBar)view).setVisibility(View.INVISIBLE);
		        	return true;
		        	  }
		          }
	          return false;
	        }
	      });

Аватара пользователя
Re4r
Сообщения: 5
Зарегистрирован: 08 июл 2013, 18:21

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение Re4r » 09 июл 2013, 19:37

Подскажите пожалуйста как MyViewBinder сделать вложенным в MainActivity классом???

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

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение snowkam » 24 сен 2013, 16:26

Добрый день.
Вопрос по уроку с подвыпердом ;-)
нужно чтобы цвет бара зависел не от одного параметра в нашем случаи от значения из массива load[] а от двух значений. Например введем еще одно поле логическое isColor
если значение истина то тогда можно менять цвет. В зависимости от параметра load[].

Такое возможно?

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

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение Foenix » 24 сен 2013, 16:29

да.
R.id.team

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

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

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение snowkam » 24 сен 2013, 16:36

Foenix писал(а):да.
а как дайте наколочку ....

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

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение Foenix » 24 сен 2013, 16:41

да как? просто в условие, где нужен выбор добавляй свое с помощью & (логическое И). Значение бери из дополнительного поля.
R.id.team

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

Аватара пользователя
trew
Сообщения: 450
Зарегистрирован: 28 сен 2013, 17:34

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение trew » 28 сен 2013, 17:42

Подскажите пожалуйста, если разместить class MyViewBinder в отдельном файле MyViewBinder.java
как присоединить его к MainActivity.java?
У меня ошибка на строчках
int red = getResources().getColor(R.color.Red);
int orange = getResources().getColor(R.color.Orange);
int green = getResources().getColor(R.color.Green);

getResources() - не понимает что это.

Multiple markers at this line
- view cannot be resolved
- The method getResources() is undefined for the type
MyViewBinder

Из предыдущих сообщений я так и не разобрался.
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

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

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение rezak90 » 28 сен 2013, 17:46

getResources() это метод контекста, тебе нужно иметь ссылку на контекст что бы вызвать метод getResources
R.id.team
Политика на форуме запрещена

smt005
Сообщения: 3
Зарегистрирован: 20 окт 2013, 00:33

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение smt005 » 20 окт 2013, 00:48

Добрый день/ночь.

Есть список который состоит из текста и кнопок и создаваемый как в примере с помощью ViewBinder.

Вопрос:
Как сделать взаимодействие кнопок этого списка?
Т.е. при нажатии на кнопку определить в каком элементе списка эта кнопка находится и выполнить какое нибудь действие (например удаление строки).

Или как лучше сделать такую задачу?

Аватара пользователя
trew
Сообщения: 450
Зарегистрирован: 28 сен 2013, 17:34

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение trew » 20 окт 2013, 11:02

При нажатии на кнопку списка, показываем какую кнопку нажали.

class MainActivity
[syntax=java]import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends Activity {

final String TAG = "mylog";

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

ListView listView = (ListView) findViewById(R.id.list_data);

CustomAdapter customAdapter = new CustomAdapter();

listView.setAdapter(customAdapter);


listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

DataModel dataModel = (DataModel) adapterView.getItemAtPosition(i);

Log.d(TAG, "string_1: " + dataModel.getName());
Log.d(TAG, "int_1: " + dataModel.getAnInt());
Log.d(TAG, "double_1: " + dataModel.getaDouble());
Log.d(TAG, "otherData_1: " + dataModel.getOtherData());

Toast.makeText(MainActivity.this, "Item Clicked: " + i, Toast.LENGTH_SHORT).show();
}
});


}
}
[/syntax]

class CustomAdapter extends BaseAdapter
[syntax=java]import java.util.ArrayList;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class CustomAdapter extends BaseAdapter {

final String TAG = "mylog";
ArrayList<DataModel> listArray;

public CustomAdapter() {
listArray = new ArrayList<DataModel>(5);
listArray.add(new DataModel("name1", 10, 4.5, "Java"));
listArray.add(new DataModel("name2", 20, 5.5, "Python"));
listArray.add(new DataModel("name3", 30, 6.5, "Pascal"));
listArray.add(new DataModel("name4", 40, 7.5, "Android"));
listArray.add(new DataModel("name5", 50, 9.5, "SQL"));
}

@Override
public int getCount() {
return listArray.size(); // всего элементов в списке list
}

@Override
public Object getItem(int i) {
return listArray.get(i); // получить элемент из list
}

@Override
public long getItemId(int i) {
return i; // id элемента
}

@Override
public View getView(int index, View view, final ViewGroup parent) {

if (view == null) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
view = inflater.inflate(R.layout.single_list_item, parent, false);
}

final DataModel dataModel = listArray.get(index);

TextView textView = (TextView) view.findViewById(R.id.tv_string_data);
textView.setText(dataModel.getName());

Button button = (Button) view.findViewById(R.id.btn_number_data);
button.setText("" + dataModel.getAnInt());

textView = (TextView) view.findViewById(R.id.tv_double_data);
textView.setText("" + dataModel.getaDouble());

button.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Log.d(TAG, "string_2: " + dataModel.getName());
Log.d(TAG, "int_2: " + dataModel.getAnInt());
Log.d(TAG, "double_2: " + dataModel.getaDouble());
Log.d(TAG, "otherData_2: " + dataModel.getOtherData());

Toast.makeText(parent.getContext(), "button clicked: " + dataModel.getAnInt(), Toast.LENGTH_SHORT).show();
}
});

view.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Log.d(TAG, "string_3: " + dataModel.getName());
Log.d(TAG, "int_3: " + dataModel.getAnInt());
Log.d(TAG, "double_3: " + dataModel.getaDouble());
Log.d(TAG, "otherData_3: " + dataModel.getOtherData());

Toast.makeText(parent.getContext(), "view clicked: " + dataModel.getOtherData(), Toast.LENGTH_SHORT).show();
}
});

return view;
}
}
[/syntax]

Помогите с ответами на следующие вопросы:
1. почему не срабатывает слушатель в MainActivity - listView.setOnItemClickListener (подробно, чтобы было понятно новичку)
2. зачем в классе CustomAdapter два раза писать похожий код
для button.setOnClickListener
и для view.setOnClickListener
Можно как-то сделать чтобы слушатель был один, а button отождествлялась со списком List (нужен пример).
Вложения
fig2.png
fig2.png (15.05 КБ) 11407 просмотров
Prg_List_Button.rar
(1.26 МБ) 225 скачиваний
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

Аватара пользователя
trew
Сообщения: 450
Зарегистрирован: 28 сен 2013, 17:34

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение trew » 21 окт 2013, 10:25

Помогите с ответами на вопросы, см. предыдущее сообщение.
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

smt005
Сообщения: 3
Зарегистрирован: 20 окт 2013, 00:33

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение smt005 » 21 окт 2013, 15:04

Да, у меня аналогичная задача и в интернете не могу найти решение.

Аватара пользователя
River
Сообщения: 4
Зарегистрирован: 23 окт 2013, 01:57

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение River » 24 окт 2013, 07:10

В этом уроке меняется цвет LinearLayout, содержащего ProgressBar. А как изменить цвет самого ProgressBar? Нагуглился такой пример:
progressBar.getProgressDrawable().setColorFilter(Color.RED, Mode.SRC_IN);
Но вместо смены цвета, приложение тупо падает. Подскажите, если кто знает, как правильно менять цвет ProgressBar.

Ответить