вынести в фоновый поток.Titannet писал(а):При запуске приложения, в логи сыпется такой текст:
"Skipped X frames - too much work inside main thread"
Думаю, это не есть хорошо. Т.е. получается содержимое метода setViewValue(...) оказывается слишком тяжелым. Как с этим бороться?
Урок 50. SimpleAdapter. Используем ViewBinder
Re: Урок 50. SimpleAdapter. Используем ViewBinder
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Re: Урок 50. SimpleAdapter. Используем ViewBinder
А как можно вынести в фоновый поток, если мы работаем с элементами UI: view.setBackgroundColor(...)?
-
- Сообщения: 9
- Зарегистрирован: 15 мар 2016, 03:10
Re: Урок 50. SimpleAdapter. Используем ViewBinder
Как достучаться до Layout в setViewValue(View view, Cursor cursor, int columnIndex) при использовании своего биндера?
Хочу покрасить весь Layout, но так как в уроке
view.setBackgroundColor(colors[...]);
меняется цвет только самого view, а не всего Layout'а
(Речь, правда, про SimpleCursorAdapter, но я думаю, что это не суть ...)
Хочу покрасить весь Layout, но так как в уроке
view.setBackgroundColor(colors[...]);
меняется цвет только самого view, а не всего Layout'а
(Речь, правда, про SimpleCursorAdapter, но я думаю, что это не суть ...)
Re: Урок 50. SimpleAdapter. Используем ViewBinder
Здравствуйте
Вопрос такой, у каждой строки ListView есть по 2 кнопки и при нажатию на одну надо делать другую недоступной.
Никак не могу добраться до второй кнопки из клика первой или наоборот, вылетает на setEnabled(true)
XML
JAVA
Вопрос такой, у каждой строки ListView есть по 2 кнопки и при нажатию на одну надо делать другую недоступной.
Никак не могу добраться до второй кнопки из клика первой или наоборот, вылетает на setEnabled(true)
XML
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/DataRow"
android:background="@color/clear"
android:orientation="vertical">
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:background="@color/white"
android:padding="5dp"
android:orientation="horizontal">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btnStart"
android:text="Start"
android:layout_weight="1">
</Button>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btnEnd"
android:text="Stop"
android:layout_weight="1">
</Button>
</LinearLayout>
</LinearLayout>
Код: Выделить всё
class MyViewBinder implements SimpleAdapter.ViewBinder {
@Override
public boolean setViewValue(View view, final Object data, final String textRepresentation) {
switch (view.getId()) {
case R.id.btnStart:
Button buttonStart = (Button)view.findViewById(R.id.btnStart);
Button buttonEnd2 = (Button)view.findViewById(R.id.btnEnd);
buttonStart.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
buttonEnd2.setEnabled(false);
// при нажатии делать другую кнопку (buttonEnd) setEnabled(false);
}
});
return true;
case R.id.btnEnd:
Button buttonEnd = (Button)view.findViewById(R.id.btnEnd);
Button buttonStart2 = (Button)view.findViewById(R.id.btnStart);
buttonEnd.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
buttonStart2.setEnabled(false);
// при нажатии делать другую кнопку (buttonStart) setEnabled(false);
}
});
return true;
}
return false;
}
}
Последний раз редактировалось mdm 23 июн 2016, 12:54, всего редактировалось 2 раза.
Re: Урок 50. SimpleAdapter. Используем ViewBinder
Что-то не так у вас id у кнопок
[syntax=java5]Button buttonStart = (Button)view.findViewById(R.id.btnStart);
Button buttonEnd2 = (Button)view.findViewById(R.id.btnStart);
Button buttonEnd = (Button)view.findViewById(R.id.btnEnd);
Button buttonStart2 = (Button)view.findViewById(R.id.btnEnd); [/syntax]
[syntax=java5]Button buttonStart = (Button)view.findViewById(R.id.btnStart);
Button buttonEnd2 = (Button)view.findViewById(R.id.btnStart);
Button buttonEnd = (Button)view.findViewById(R.id.btnEnd);
Button buttonStart2 = (Button)view.findViewById(R.id.btnEnd); [/syntax]
Re: Урок 50. SimpleAdapter. Используем ViewBinder
Ошибся когда сюда писал, поправил вопрос, спс за неточностиklblk писал(а):Что-то не так у вас id у кнопок
Re: Урок 50. SimpleAdapter. Используем ViewBinder
Скорее всего не получится так сделать, пробуйте кастомный адаптер. В setViewValue() в качетве View приходит кнопка и получить из него вторую кнопку не получится.
Re: Урок 50. SimpleAdapter. Используем ViewBinder
Да я понимаю. я думал может быть есть что то типа, не java ListView.item[0].getChild() и через такое добратьсяklblk писал(а):Скорее всего не получится так сделать, пробуйте кастомный адаптер. В setViewValue() в качетве View приходит кнопка и получить из него вторую кнопку не получится.
Re: Урок 50. SimpleAdapter. Используем ViewBinder
Посмотрите на 54 урок. Но вообще конечно лучше использовать RecyclerView (уроков по нему тут нет)
Re: Урок 50. SimpleAdapter. Используем ViewBinder
RecyclerView не подходит, нужно минимум для 4.1
Re: Урок 50. SimpleAdapter. Используем ViewBinder
RecyclerView в support library, и еще можно использовать на старых версияхmdm писал(а):RecyclerView не подходит, нужно минимум для 4.1
Re: Урок 50. SimpleAdapter. Используем ViewBinder
Спасибо будем пробовать
Re: Урок 50. SimpleAdapter. Используем ViewBinder
Не пойму зачем в item.xml нужен первый LinearLayout в котором по сути лежит другой LinearLayout и больше ничего, я его убрал вроде все так же работает.
Re: Урок 50. SimpleAdapter. Используем ViewBinder
Код: Выделить всё
FATAL EXCEPTION: main
01-09 07:47:57.783 9649 9649 E AndroidRuntime Process: com.aide.trainer.myapp, PID: 9649
01-09 07:47:57.783 9649 9649 E AndroidRuntime java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
01-09 07:47:57.783 9649 9649 E AndroidRuntime at com.aide.trainer.myapp.MainActivity$100000001$CustomBinder.setViewValue(MainActivity.java:146)
Фрагмент кода:
Код: Выделить всё
ArrayList<Map<String,Object>>ARL=new ArrayList<>();
Map<String,Object>m3;
for(int i=0;i<s.length;i++)
{
m3=new HashMap<String,Object>();
m3.put("word",s[i]);
m3.put("size",((i+1)*5));
ARL.add(m3);
}
SimpleAdapter sad=new SimpleAdapter
(this,ARL,android.R.layout.simple_list_item_1,
new String[]{"word","size"},new int[]{android.R.id.text1});
class CustomBinder implements ViewBinder
{
public boolean setViewValue(View v,Object dat,String text)
{
int i=((Integer)dat).intValue();
switch(v.getId())
{
case android.R.id.text1: ((TextView)v).setTextSize(i);
return true;
}
return false;
}
}
sad.setViewBinder(new CustomBinder());
ListView lvb=(ListView)findViewById(R.id.bindev);
lvb.setAdapter(sad);
}
}
Re: Урок 50. SimpleAdapter. Используем ViewBinder
Я что-то не совсем понял, зачем нужен этот Binder.. Почему нельзя было просто как в прошлом уроке сделать MySimpleAdapter? Если можно было, то каково вообще предназначение этого Binder'a на практике?
Или весь смысл именно в конвертировании в Integer?
Или весь смысл именно в конвертировании в Integer?
Re: Урок 50. SimpleAdapter. Используем ViewBinder
Переопределение методов setViewText() и setViewImage() из прошлого урока позволяют настроить только отображение текста и картинок (так как эти методы принимают на вход только параметры типа TextView и ImageView соответственно) , но они не позволяют изменять отображение других видов view (например "заполненность" ProgressBar'а) - вообщем-то изменить размер текста можно было и с помощью setViewText() - просто я выбрал не очень наглядный пример для самопроверки темы урока , но это не меняет того что пример почему-то выдаёт ту же ошибку , даже если переписать код:
Очень странно вроде бы всё как в уроке: в Map помещаю сначала String-значение , а потом int , затем помещаю Map в коллекцию , извлекаю значение из dat также как в уроке , но вместо int почему то извлекается String и получается ошибка преобразования типов
Код: Выделить всё
ArrayList<Map<String,Object>>ARL=new ArrayList<Map<String,Object>>();
Map<String,Object>m3;
for(int i=0;i<s.length;i++)
{
m3=new HashMap<String,Object>();
m3.put("word",s[i]);
m3.put("size",((i+1)*5));
ARL.add(m3);
}
SimpleAdapter sad=new SimpleAdapter
(this,ARL,R.layout.secac, new String[]{"word","size"},
new int[]{R.id.sectex,R.id.secacPG});
class CustomBinder implements ViewBinder
{
public boolean setViewValue(View v,Object dat,String text)
{
int i=((Integer)dat).intValue();
switch(v.getId())
{
case R.id.secacPG: ((ProgressBar)v).setProgress(i);
return true;
}
return false;
}
}
sad.setViewBinder(new CustomBinder());
ListView lvb=(ListView)findViewById(R.id.bindev);
lvb.setAdapter(sad);
}
}