ImageAdapter

Ответить
ValeraMelihov
Сообщения: 9
Зарегистрирован: 23 фев 2015, 23:49

ImageAdapter

Сообщение ValeraMelihov » 23 фев 2015, 23:59

Ребята хелп, идея в том чтобы значение из TextView могло задавать выбор массивы картинок для галереи, неработает, вчем косячу не пойму
package com.samples.ui.expandablelistview;

import java.util.Set;

import android.content.Context;
import android.text.GetChars;
import android.view.TextureView;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView.FindListener;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.SpinnerAdapter;
import android.widget.TextView;

@SuppressWarnings("deprecation")
public class ImageAdapter extends BaseAdapter implements SpinnerAdapter {
private Context mcontext;
int j;
public static Integer[] Thumbslbs = { R.drawable.a1, R.drawable.a2,
R.drawable.a3, R.drawable.a4, R.drawable.a5, R.drawable.a6,
R.drawable.a7, R.drawable.a8, R.drawable.a9, R.drawable.a10, };

public static Integer[] Thumbslbs2 = { R.drawable.a11, R.drawable.a12,
R.drawable.a13, R.drawable.a14, R.drawable.a15, };

public static Integer[] Thumbslbs3 = { R.drawable.a11, };

public ImageAdapter(Context Context) {
// TODO Auto-generated constructor stub
mcontext = Context;
}

@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}

public void setParent(MainActivity parent) {
this.parent = parent;
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView ImageView = null;
if (convertView == null) {
ImageView = new ImageView(mcontext);
ImageView.setLayoutParams(new Gallery.LayoutParams(115, 100));
} else {
ImageView = (ImageView) convertView;
}

ImageView.setImageResource(Thumbslbs[position]);
return ImageView;
}

@Override
public int getCount() {
TextView phone = (TextView) view.findViewById(R.id.detailsPhone);
int NAMB=phone.gettext().tostring();
switch (NAMB) {
case "111":
return Thumbslbs.length;
case "222":
return Thumbslbs2.length;
default:
return Thumbslbs3.length;
}
}

}

ANdriy123456
Сообщения: 138
Зарегистрирован: 27 июн 2014, 01:41

Re: ImageAdapter

Сообщение ANdriy123456 » 24 фев 2015, 02:37

Независимо от значения в TextView phone у тебя всегда берутся картинки с масива Thumbslbs и скорей всего нужно сменить тип данных в масивах

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: ImageAdapter

Сообщение doter.ua » 24 фев 2015, 10:30

ImageView.setImageResource(Thumbslbs[position]); Так ты всегда используешь только этот массив.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

ValeraMelihov
Сообщения: 9
Зарегистрирован: 23 фев 2015, 23:49

Re: ImageAdapter

Сообщение ValeraMelihov » 24 фев 2015, 20:58

Ребят я сделал 3 разных массива (Thumbslbs,Thumbslbs2,Thumbslbs3) и их могу через switch в методе public int getCount() выбрать один из массива картинок, мне надо задавать в этом методе возможность выбора массива Thumbslbs или Thumbslbs2 или Thumbslbs3 при определенных значениях

ANdriy123456
Сообщения: 138
Зарегистрирован: 27 июн 2014, 01:41

Re: ImageAdapter

Сообщение ANdriy123456 » 25 фев 2015, 23:19

В методе getCount() у тебя возвращаеться только длина одного из 3 масивов, а не выбираеться масив для использования картинок.
Для того, чтобы код работал так как тебе надо:
1. в начале класа создать пустой масив, например Integer[] mass
2. в методе getView нужно использовать ImageView.setImageResource(mass[position]);
3. в методе getCount в switch перед тем как возвращать размер масива нужно записать в масив значения из соответствующего масива.

ValeraMelihov
Сообщения: 9
Зарегистрирован: 23 фев 2015, 23:49

Re: ImageAdapter

Сообщение ValeraMelihov » 26 фев 2015, 00:03

ANdriy123456 писал(а):В методе getCount() у тебя возвращаеться только длина одного из 3 масивов, а не выбираеться масив для использования картинок.
Для того, чтобы код работал так как тебе надо:
1. в начале класа создать пустой масив, например Integer[] mass
2. в методе getView нужно использовать ImageView.setImageResource(mass[position]);
3. в методе getCount в switch перед тем как возвращать размер масива нужно записать в масив значения из соответствующего масива.


первое и второе я понял, а последнее не очень, погуглю почитаю, если е сложно то напиши пример

ANdriy123456
Сообщения: 138
Зарегистрирован: 27 июн 2014, 01:41

Re: ImageAdapter

Сообщение ANdriy123456 » 26 фев 2015, 00:57

****
case "111":
mass.addAll(Thumbslbs); //вроде так))
return Thumbslbs.length;
****

ValeraMelihov
Сообщения: 9
Зарегистрирован: 23 фев 2015, 23:49

Re: ImageAdapter

Сообщение ValeraMelihov » 28 фев 2015, 17:30

ANdriy123456 писал(а):****
case "111":
mass.addAll(Thumbslbs); //вроде так))
return Thumbslbs.length;
****
спасибо! возможность выбора массива происходит и так, мне надо чтобы при определенном значении в TextView

@Override
public int getCount() {
TextView phone = (TextView) view.findViewById(R.id.detailsPhone);
int NAMB=phone.gettext().tostring();
switch (NAMB) {
case "111":
return Thumbslbs.length;
case "222":
return Thumbslbs2.length;
default:
return Thumbslbs3.length;
}

ненадо некаких масс и прочего, ошибка идет из за findViewById, эклипс не понимает что это и предлогает создать или класс или public int findViewById

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: ImageAdapter

Сообщение doter.ua » 28 фев 2015, 18:00

Сделай свой кастомный адаптер extends ArrayAdapter<Integer>. В конструктор передается коллекция, и потом при надобности просто меняешь содержимое этой коллекции и сообщаешь адаптеру чтобы "подхватил изменения".
Грубо говоря:

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

       ArrayList<Integer> Thumbslbs = new ArrayList<>();
        ArrayList<Integer> Thumbslbs2 = new ArrayList<>();
        ArrayList<Integer> Thumbslbs3 = new ArrayList<>();

        Thumbslbs.add( R.id.someImage );
        Thumbslbs.add( R.id.someImage2 );
        Thumbslbs.add( R.id.someImage3 );

        Thumbslbs2.add( R.id.someImage );
        Thumbslbs2.add( R.id.someImage2 );
        Thumbslbs2.add( R.id.someImage3 );

        Thumbslbs3.add( R.id.someImage );
        Thumbslbs3.add( R.id.someImage2 );
        Thumbslbs3.add( R.id.someImage3 );

        ArrayList<Integer> mainList = new ArrayList<>();
        MyAdapter<Integer> adapter = new ArrayAdapter<Integer>(this, R.layout.my_xml, mainList);
        myListView.setAdapter( adapter );
Для обновления

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

        //  меняешь коллекцию (добавить\ удалить\ изменить элементы)                                                
        mainList.clear();                       // очистить всю коллекцию
        mainList.addAll( Thumbslbs3 );    // скопировать все элементы другой коллекции 
        ((MyAdapter) myListView.getAdapter).notifyDataSetChanged();
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

ValeraMelihov
Сообщения: 9
Зарегистрирован: 23 фев 2015, 23:49

Re: ImageAdapter

Сообщение ValeraMelihov » 28 фев 2015, 19:33

doter.ua писал(а):Сделай свой кастомный адаптер extends ArrayAdapter<Integer>. В конструктор передается коллекция, и потом при надобности просто меняешь содержимое этой коллекции и сообщаешь адаптеру чтобы "подхватил изменения".
Грубо говоря:

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

       ArrayList<Integer> Thumbslbs = new ArrayList<>();
        ArrayList<Integer> Thumbslbs2 = new ArrayList<>();
        ArrayList<Integer> Thumbslbs3 = new ArrayList<>();

        Thumbslbs.add( R.id.someImage );
        Thumbslbs.add( R.id.someImage2 );
        Thumbslbs.add( R.id.someImage3 );

        Thumbslbs2.add( R.id.someImage );
        Thumbslbs2.add( R.id.someImage2 );
        Thumbslbs2.add( R.id.someImage3 );

        Thumbslbs3.add( R.id.someImage );
        Thumbslbs3.add( R.id.someImage2 );
        Thumbslbs3.add( R.id.someImage3 );

        ArrayList<Integer> mainList = new ArrayList<>();
        MyAdapter<Integer> adapter = new ArrayAdapter<Integer>(this, R.layout.my_xml, mainList);
        myListView.setAdapter( adapter );
Для обновления

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

        //  меняешь коллекцию (добавить\ удалить\ изменить элементы)                                                
        mainList.clear();                       // очистить всю коллекцию
        mainList.addAll( Thumbslbs3 );    // скопировать все элементы другой коллекции 
        ((MyAdapter) myListView.getAdapter).notifyDataSetChanged();

Спасибо большое что помогаешь, я вижу что ты шаришь в програмировании, но я наверное неправильно формулирую то что я хочу, вы все пишете как заменить и как выбрать коллекцию, но мне надо в код добавить возможность выбирать коллекцию, с помощью сравнения значения из TextView....мне не надо новых массивов, или замены картинок в нем, ВСЕ И ТАК РАБОТАЕТ, мне надо решить проблему со сравнением значения из текствью...

ANdriy123456
Сообщения: 138
Зарегистрирован: 27 июн 2014, 01:41

Re: ImageAdapter

Сообщение ANdriy123456 » 28 фев 2015, 22:08

тебе и говорят, как сделать, то что ты хочеш.
Я уже не раз говорил, тебе что метод public int getCount() возвращает тебе только длину одного из масивов!!! (обрати внимание на тип int)

да, код сейчас работает, но он постоянно тянет картинки с масива Thumbslbs.





public class ImageAdapter extends BaseAdapter implements SpinnerAdapter {
private Context mcontext;
int j;
public static Integer[] Thumbslbs = { R.drawable.a1, R.drawable.a2,
R.drawable.a3, R.drawable.a4, R.drawable.a5, R.drawable.a6,
R.drawable.a7, R.drawable.a8, R.drawable.a9, R.drawable.a10, };

public static Integer[] Thumbslbs2 = { R.drawable.a11, R.drawable.a12,
R.drawable.a13, R.drawable.a14, R.drawable.a15, };

public static Integer[] mass;

public static Integer[] Thumbslbs3 = { R.drawable.a11, };

public ImageAdapter(Context Context) {
// TODO Auto-generated constructor stub
mcontext = Context;
}

@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}

public void setParent(MainActivity parent) {
this.parent = parent;
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView ImageView = null;
if (convertView == null) {
ImageView = new ImageView(mcontext);
ImageView.setLayoutParams(new Gallery.LayoutParams(115, 100));
} else {
ImageView = (ImageView) convertView;
}

ImageView.setImageResource(mass[position]);
return ImageView;
}

@Override
public int getCount() {
TextView phone = (TextView) view.findViewById(R.id.detailsPhone);
int NAMB=phone.gettext().tostring();
switch (NAMB) {
case "111":
mass = new Integer[Thumbslbs.length];
mass.addAll(Thumbslbs);
return Thumbslbs.length;
case "222":
mass = new Integer[Thumbslbs2.length];
mass.addAll(Thumbslbs2);
return Thumbslbs2.length;
default:
mass = new Integer[Thumbslbs3.length];
mass.addAll(Thumbslbs3);
return Thumbslbs3.length;
}
}

}

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: ImageAdapter

Сообщение doter.ua » 28 фев 2015, 22:32

Используйте теги [ коде ] [/коде] читать импосибл!!!
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: ImageAdapter

Сообщение doter.ua » 28 фев 2015, 22:38

ValeraMelihov писал(а):ВСЕ И ТАК РАБОТАЕТ
Вот код, где тоже все работает:

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

public String megaFunction( Activity ivan ){
   int result;
   for( int i = 0; i < 999999; i ++ ){
        result += 50;
   }
   return "5 + 5";
}
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: ImageAdapter

Сообщение doter.ua » 28 фев 2015, 22:50

Вообще адаптеры начинаются где-то с 50го урока, если ты недавно начал изучать ведроид и пытаешься их обуздать копипастом, то у меня для тебя плохие новости.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

ValeraMelihov
Сообщения: 9
Зарегистрирован: 23 фев 2015, 23:49

Re: ImageAdapter

Сообщение ValeraMelihov » 28 фев 2015, 23:00

doter.ua писал(а):Используйте теги [ коде ] [/коде] читать импосибл!!!
Возможно я понял о чем ты, ты имел в виду что public int getCount, буду пробовать

ValeraMelihov
Сообщения: 9
Зарегистрирован: 23 фев 2015, 23:49

Re: ImageAdapter

Сообщение ValeraMelihov » 28 фев 2015, 23:24

doter.ua писал(а):Вообще адаптеры начинаются где-то с 50го урока, если ты недавно начал изучать ведроид и пытаешься их обуздать копипастом, то у меня для тебя плохие новости.

не спорю, занимаюсь я им недавно, но до конца замысла осталось совсем немного, решить эту проблему и наполнить контентом, и я по урокам только на экспандбл лист вью

Поставил твою версию, подогнал все к своему коду, но в mass.addAll(Thumbslbs3); выдает ошибку синтаксиса syntax error insert assignmentoperator expression to complete expression , буду лопатить инфу дальше, спасибо что разжевываешь мне дибилу все это

public int getCount() {
TextView phone = (TextView) parent.findViewById(R.id.detailsPhone);
String NAMB = phone.getText().toString();
switch (NAMB) {
case "111":
mass = new Integer[Thumbslbs.length];
mass.addAll(Thumbslbs);
return Thumbslbs.length;
case "222":
mass = new Integer[Thumbslbs2.length];
mass.addAll(Thumbslbs2);
return Thumbslbs2.length;
default:
mass = new Integer[Thumbslbs3.length];
mass.addAll(Thumbslbs3);
return Thumbslbs3.length;
}
}
}

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: ImageAdapter

Сообщение doter.ua » 28 фев 2015, 23:32

ValeraMelihov писал(а):
doter.ua писал(а):Вообще адаптеры начинаются где-то с 50го урока, если ты недавно начал изучать ведроид и пытаешься их обуздать копипастом, то у меня для тебя плохие новости.

не спорю, занимаюсь я им недавно, но до конца замысла осталось совсем немного, решить эту проблему и наполнить контентом, и я по урокам только на экспандбл лист вью

Поставил твою версию, подогнал все к своему коду, но в mass.addAll(Thumbslbs3); выдает ошибку синтаксиса syntax error insert assignmentoperator expression to complete expression , буду лопатить инфу дальше, спасибо что разжевываешь мне дибилу все это

public int getCount() {
TextView phone = (TextView) parent.findViewById(R.id.detailsPhone);
String NAMB = phone.getText().toString();
switch (NAMB) {
case "111":
mass = new Integer[Thumbslbs.length];
mass.addAll(Thumbslbs);
return Thumbslbs.length;
case "222":
mass = new Integer[Thumbslbs2.length];
mass.addAll(Thumbslbs2);
return Thumbslbs2.length;
default:
mass = new Integer[Thumbslbs3.length];
mass.addAll(Thumbslbs3);
return Thumbslbs3.length;
}
}
}
Почитай про коллекции в джава.
1) Integer[] - это массив
2) ArrayList<Integer> - это коллекция
http://developer.alexanderklimov.ru/and ... aylist.php
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

ValeraMelihov
Сообщения: 9
Зарегистрирован: 23 фев 2015, 23:49

Re: ImageAdapter

Сообщение ValeraMelihov » 28 фев 2015, 23:47

Почитай про коллекции в джава.
1) Integer[] - это массив
2) ArrayList<Integer> - это коллекция
http://developer.alexanderklimov.ru/and ... aylist.php[/quote]


Буду сидеть курить, но теперь у меня мысли пойти другим путем, смысл программы был в том что после ExpandableListView, в открывшемся layout, в галерее показывались определленные картинки, и я начитавшись что текст вью можно сравнить и прочитать его значение, решил что он мне поможет при выборе массива для галереи, но сейчас думаю попробовать intent добавить и им задавать из MainActivity в ImageAdapter значение при котором будет выводиться массив, но ты помог понять что getCount() работает с одним массивом, и его надо обновлять....пошол курить о массивах

Ответить