I have created following adapter:
package org.virtualbet.gui.util;
import java.util.List;
import org.virtualbet.R;
import org.virtualbet.model.Tip;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
public class TipListAdapter extends ArrayAdapter<Tip> {
private final Context context;
private List<Tip> values;
public TipListAdapter(Context context, int textViewResourceId, List<Tip> objects) {
super(context, textViewResourceId, objects);
//super(context, R.layout.rowlayout, values);
this.context = context;
this.values = objects;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
try {
View v = convertView;
if (v == null) {
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.row_tip, null);
}
Tip tip = values.get(position);
if (tip!=null) {
((TextView)v.findViewById(R.id.textviewtipid)).setText((CharSequence)tip.getTipNumber());
((TextView)v.findViewById(R.id.textviewtiprepresentation)).setText((CharSequence)tip.getTipRepresentation());
((TextView)v.findViewById(R.id.textviewtipresult)).setText((CharSequence)tip.getDetails());
((TextView)v.findViewById(R.id.textviewtipid)).setText((CharSequence)tip.getTipOptions());
return v;
}
return null;
} catch (Throwable t) {
Log.e("A", t.toString());
return null;
}
}
}
ListView xml looks like this:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView android:text="TextView"
android:id="@+id/textviewtipid"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
</TextView>
<TextView android:text="TextView"
android:id="@+id/textviewtiprepresentation"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
<TextView android:text="TextView"
android:id="@+id/textviewtipresult"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
<TextView android:text="TextView"
android:id="@+id/textviewtipplayed"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
</LinearLayout>
getView method is called...all textviews change their values...and after last change (no matter which one is it) program goes into catch part???
Why? Did anyone have problems like this? I've read somewhere that's a project (eclipse) issue....
Oh yes, place where I am changing model is:
package org.virtualbet.gui;
import java.util.ArrayList;
import java.util.List;
import org.virtualbet.R;
import org.virtualbet.bll.TipBLL;
import org.virtualbet.gui.util.TipListAdapter;
import org.virtualbet.model.Ticket;
import org.virtualbet.model.Tip;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
public class FollowTicket extends Activity {
private static final String TAG = "FollowTicket";
private TipBLL bll;
private TipListAdapter tipListAdapter;
private ListView lv;
private List<Tip> tips;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.follow_ticket);
bll = new TipBLL();
tips = new ArrayList<Tip>();
tipListAdapter = new TipListAdapter(this.getApplicationContext(), R.layout.row_tip, tips);
lv = ((ListView)findViewById(R.id.listViewTips));
lv.setAdapter(tipListAdapter);
((Button)findViewById(R.id.buttonSearchForTicket)).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
searchTicket(((EditText)findViewById(R.id.editTextSerialNumber)).getText().toString());
}
});
}
private void searchTicket (String serialNumber) {
Log.i(TAG, "Searching ticket " + serialNumber);
Ticket ticket = bll.getTicket(serialNumber);
if (ticket != null){
Log.i(TAG, "Found it!");
tips.clear();
for (Tip tip : ticket.getTips()) {
Log.i(TAG, "Adding tip " + tip.getTipNumber());
tips.add(tip);
}
tipListAdapter.notifyDataSetChanged();
} else {
Log.i(TAG, "Didn't find it!");
}
}
}