Страница 2 из 4

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

Добавлено: 27 ноя 2012, 22:40
lavan
Спасибо, разобрался

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

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

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

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

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

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

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

Добавлено: 06 фев 2013, 20:00
dens
Ну да придётся тогда и обновление элементов делать при этом.
Но если надо, то ничего не поделать.

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

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

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

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

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

Добавлено: 10 май 2013, 23:46
Sintel
Что написать вместо "ЧТО_ТО" в данном коде, чтобы некоторые 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;
	        }
	      });

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

Добавлено: 09 июл 2013, 19:37
Re4r
Подскажите пожалуйста как MyViewBinder сделать вложенным в MainActivity классом???

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

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

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

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

Добавлено: 24 сен 2013, 16:29
Foenix
да.

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

Добавлено: 24 сен 2013, 16:36
snowkam
Foenix писал(а):да.
а как дайте наколочку ....

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

Добавлено: 24 сен 2013, 16:41
Foenix
да как? просто в условие, где нужен выбор добавляй свое с помощью & (логическое И). Значение бери из дополнительного поля.

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

Добавлено: 28 сен 2013, 17:42
trew
Подскажите пожалуйста, если разместить 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

Из предыдущих сообщений я так и не разобрался.

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

Добавлено: 28 сен 2013, 17:46
rezak90
getResources() это метод контекста, тебе нужно иметь ссылку на контекст что бы вызвать метод getResources

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

Добавлено: 20 окт 2013, 00:48
smt005
Добрый день/ночь.

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

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

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

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

Добавлено: 20 окт 2013, 11:02
trew
При нажатии на кнопку списка, показываем какую кнопку нажали.

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 (нужен пример).

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

Добавлено: 21 окт 2013, 10:25
trew
Помогите с ответами на вопросы, см. предыдущее сообщение.

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

Добавлено: 21 окт 2013, 15:04
smt005
Да, у меня аналогичная задача и в интернете не могу найти решение.

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

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