Witam
Poszukuje rozwiązanie następującego problemu.
Mam własny adapter klasa dziedzicząca po BaseAdapter
a w niej min. EditText i ImageView
odpaliłem Textwatcher a dane z edittextów chciał bym odpierać w głównej activity.
Niestety NullPointerException - wszystkie dane są pełne jeśli taki sam TexWatcher odpalę z głównej klasy a nie z klasy BaseAdapter to wszystko śmiga
klasa adapter listy
import android.content.Context;
import android.graphics.Bitmap;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.ImageView;
public class List_new extends BaseAdapter {
private Context mctx;
private String[] wla;
private Bitmap[] bmps;
private Bitmap[] bmpC;
public List_new (Context ctx, String[] wlac, Bitmap[] bmp, Bitmap[] Cbmp) {
super();
this.wla=wlac;
this.mctx = ctx;
this.bmps = bmp;
this.bmpC = Cbmp;
}
public int getCount() {
return bmps.length;
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
private class ViewHolderPattern {
ImageView img_w_layoucie;
ImageView img_2;
EditText edit_w_layoucie;
List_new list_new;
}
public View getView(final int position, View convertView, final ViewGroup parent) {
ViewHolderPattern view_holder;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) mctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.activity_list_new, parent, false);
view_holder = new ViewHolderPattern();
view_holder.img_w_layoucie = (ImageView) convertView.findViewById(R.id.imageView1);
view_holder.img_w_layoucie.setTag(view_holder.list_new);
view_holder.img_2 = (ImageView) convertView.findViewById(R.id.imageView);
view_holder.img_2.setTag(view_holder.list_new);
view_holder.edit_w_layoucie = (EditText) convertView.findViewById(R.id.editText);
view_holder.edit_w_layoucie.setTag(view_holder.list_new);
// view_holder.list_new = wla.get(position);
view_holder.edit_w_layoucie.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3)
{
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i2, int i3)
{
}
@Override
public void afterTextChanged(Editable editable) {
if(editable.toString().length()==4)
{
Galeria gal= new Galeria();
gal.Call_list(editable.toString(),position);}
Log.v("clasa","str " + editable.toString() + " position " + position);
}
});
convertView.setTag(view_holder);
} else {
view_holder = (ViewHolderPattern) convertView.getTag();
}
view_holder.edit_w_layoucie.setText(wla[position]);
view_holder.img_w_layoucie.setImageBitmap(bmps[position]);
view_holder.img_2.setImageBitmap(bmpC[position]);
return convertView;
// return ch;
}
}
główna activity
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.widget.EditText;
import android.content.SharedPreferences;
import android.widget.ListView;
import java.util.ArrayList;
import java.io.File;
public class Galeria extends Activity {
String IP;
SharedPreferences.Editor editor ;
boolean[] wl = new boolean[8];
int[] bmID = new int[8];
Bitmap[] bitmapki = new Bitmap[8];
Bitmap[] bitmapTRUE = new Bitmap[8];
public Bitmap[] bitmapC = new Bitmap[8];
String[] Ceny = new String[8];
ListView lista ;
private File[] czerwone;
private File[] zielone;
private File[] zolte;
private File CzerwoneS = new File( "/mnt/sdcard/external_sdcard/Images/32x16S/Czerwony/");
private File ZieloneS = new File("/mnt/sdcard/external_sdcard/Images/32x16S/Zielone/");
private File ZolteS = new File("/mnt/sdcard/external_sdcard/Images/32x16S/Zolte/");
public ArrayList<Bitmap> a=new ArrayList<Bitmap>();
Bitmap[] CzerwoneB = new Bitmap[20];
Bitmap[] ZieloneB = new Bitmap[12];
Bitmap[] ZolteB = new Bitmap[12];
EditText testowy;
public Galeria(){}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_galeria);
SharedPreferences prefs = this.getSharedPreferences("pl.xx.www.pyldroid", Context.MODE_PRIVATE);
lista = (ListView) findViewById(R.id.listView);
testowy = (EditText) findViewById(R.id.editText2);
testowy.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3)
{
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i2, int i3)
{
}
@Override
public void afterTextChanged(Editable editable) {
if(editable.toString().length()==4)
{
// addExpenseModel.setAmount(editable.toString());
Call_list(editable.toString(), 2);}
// notifyDataSetChanged();
}});
//-------------------------------odczyt danych
editor = prefs.edit();
IP=(prefs.getString("IP_A", "192.168.1.199"));
// jasnosc=(prefs.getInt("Bri", 0));
// int size = prefs.getInt(wl + "_size", 0);
int index =0;
for(int i=0;i<8;i++){
wl[i] = prefs.getBoolean("wl_" + i, true);
bmID[i]=prefs.getInt("bm_" + i, i);
bitmapki[i] = BitmapFactory.decodeResource(getResources(), bmID[i]);
if (wl[i]==true) {
bitmapTRUE[index] = bitmapki[i];
index++;
}}
String[] Ceny = new String[index];
Bitmap[] bitmapTRUE = new Bitmap[index];
index=0;
for(int i=0;i<8;i++) {
if (wl[i] == true) {
bitmapTRUE[index] = bitmapki[i];
index++;
}
}
//--------------------------zaladowanie obrazkow
czerwone = CzerwoneS.listFiles();
zielone = ZieloneS.listFiles();
zolte = ZolteS.listFiles();
for(int i=0;i<czerwone.length;i++)
{
CzerwoneB[i] = BitmapFactory.decodeFile(czerwone[i].getAbsolutePath());
}
a.add(CzerwoneB[10]);
a.add(CzerwoneB[10]);
a.add(CzerwoneB[11]);
a.add(CzerwoneB[10]);
index=0;
Call_list("65.3", 2);
for(int i=0;i<8;i++) {
if (wl[i] == true) {
bitmapC[index] = combineImageIntoOne(a);
index++;
}
}
//--------------------------lista
List_new adapter_listy = new List_new(this ,Ceny, bitmapTRUE, bitmapC);
lista.setAdapter(adapter_listy);
}
public void Call_list(String wart,int poz)
{ a.clear();
Character ch1 = wart.charAt(0);
Character ch2 = wart.charAt(1);
Character ch3 = wart.charAt(2);
Character ch4 = wart.charAt(3);
if (ch1 == '.') { a.add(CzerwoneB[11]);}
else {a.add(CzerwoneB[ Character.getNumericValue(ch1)]);}
if (ch2 == '.') { a.add(CzerwoneB[11]);}
else {a.add(CzerwoneB[ Character.getNumericValue(ch2)]);}
if (ch3 == '.') { a.add(CzerwoneB[11]);}
else {a.add(CzerwoneB[ Character.getNumericValue(ch3)]);}
if (ch4 == '.') { a.add(CzerwoneB[11]);}
else {a.add(CzerwoneB[ Character.getNumericValue(ch4)]);}
Log.v("odebrane",wart + " "+poz+" "+ ch4 );
bitmapC[poz] = combineImageIntoOne(a);
List_new adapter_listy = new List_new(this ,Ceny, bitmapTRUE, bitmapC);
lista.setAdapter(adapter_listy);
combineImageIntoOne(a);
}
//---------------------scalanie obrazkow
public Bitmap combineImageIntoOne(ArrayList<Bitmap> bitmap) {
int w=32, h = 16;
int right = 0;
Log.v("ilosc bmp "," " +bitmap.size());
Bitmap temp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(temp);
if(bitmap.size() == 4)
for (int i = 0; i < bitmap.size(); i++) {
canvas.drawBitmap(bitmap.get(i), right, 0f, null);
if (bitmap.get(i).getWidth()>5)
right += bitmap.get(i).getWidth()+1;
else
right += bitmap.get(i).getWidth();
Log.v("dl bmp ", " " + bitmap.get(i).getWidth());
}
return temp;
}
}
Prawdopodobnie problemy są 2
1 nie zlokalizowałem / ale dane odebrane z TextWatchera z poza głównej klasy nie pozwalają nic robić w głównej. a może to wina definicji głównej klasy zawarta w tej od adaptera ?
2 możliwe że sypie się dlatego że odbieram dane z adaptera listy i na ich podstawie wstawiam nowy adapter / ale nie znam dokładnej przyczyny ?