Страница 1 из 1

ImageAdapter

Добавлено: 23 фев 2015, 23:59
ValeraMelihov
Ребята хелп, идея в том чтобы значение из 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;
}
}

}

Re: ImageAdapter

Добавлено: 24 фев 2015, 02:37
ANdriy123456
Независимо от значения в TextView phone у тебя всегда берутся картинки с масива Thumbslbs и скорей всего нужно сменить тип данных в масивах

Re: ImageAdapter

Добавлено: 24 фев 2015, 10:30
doter.ua
ImageView.setImageResource(Thumbslbs[position]); Так ты всегда используешь только этот массив.

Re: ImageAdapter

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

Re: ImageAdapter

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

Re: ImageAdapter

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


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

Re: ImageAdapter

Добавлено: 26 фев 2015, 00:57
ANdriy123456
****
case "111":
mass.addAll(Thumbslbs); //вроде так))
return Thumbslbs.length;
****

Re: ImageAdapter

Добавлено: 28 фев 2015, 17:30
ValeraMelihov
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

Re: ImageAdapter

Добавлено: 28 фев 2015, 18:00
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();

Re: ImageAdapter

Добавлено: 28 фев 2015, 19:33
ValeraMelihov
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....мне не надо новых массивов, или замены картинок в нем, ВСЕ И ТАК РАБОТАЕТ, мне надо решить проблему со сравнением значения из текствью...

Re: ImageAdapter

Добавлено: 28 фев 2015, 22:08
ANdriy123456
тебе и говорят, как сделать, то что ты хочеш.
Я уже не раз говорил, тебе что метод 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;
}
}

}

Re: ImageAdapter

Добавлено: 28 фев 2015, 22:32
doter.ua
Используйте теги [ коде ] [/коде] читать импосибл!!!

Re: ImageAdapter

Добавлено: 28 фев 2015, 22:38
doter.ua
ValeraMelihov писал(а):ВСЕ И ТАК РАБОТАЕТ
Вот код, где тоже все работает:

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

public String megaFunction( Activity ivan ){
   int result;
   for( int i = 0; i < 999999; i ++ ){
        result += 50;
   }
   return "5 + 5";
}

Re: ImageAdapter

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

Re: ImageAdapter

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

Re: ImageAdapter

Добавлено: 28 фев 2015, 23:24
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;
}
}
}

Re: ImageAdapter

Добавлено: 28 фев 2015, 23:32
doter.ua
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

Re: ImageAdapter

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


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