I am working on listview showing results of a lottery, the results are stored in a dababase Records
, and coded as follows:
Code:
generate listing:
public void generate_listing()
{
String action = "recordId " + "DESC";
Record = Select.from(Records.class).orderBy(action).list();
recordId_list = new ArrayList<Integer>();
result_list = new ArrayList<String>();
recordId_list.clear();
result_list.clear();
lv1.invalidateViews();
for (int i = 0; i < Record.size(); ++i)
{
recordId_list.add(Record.get(i).getrecordId());
result_list.add(Record.get(i).getResult());
}
lv1.setAdapter(new My_LV_ArrayAdapter(RecordListActivity2.this));
}
Adapter:
private class My_LV_ArrayAdapter extends BaseAdapter
{
private LayoutInflater mInflater;
private Context mContext = null;
public My_LV_ArrayAdapter(Context context)
{
mContext = context;
mInflater = LayoutInflater.from(mContext);
}
public int getCount()
{
return recordId_list.size();
}
public Object getItem(int arg0)
{
return recordId_list.get(arg0);
}
public long getItemId(int position)
{
return position;
}
@Override
public int getViewTypeCount()
{
if (getCount() != 0)
return getCount();
return 1;
}
public View getView(int position, View convertView, ViewGroup parent)
{
if (convertView == null)
{
convertView = mInflater.inflate(R.layout.list_item2, null);
}
String xx = Record.get(position).getResult();
String [] temp = null;
temp = xx.split("-");
ArrayList<Integer> tempArray = new ArrayList<Integer>();
for (int k=0; k<6; k++)
{
tempArray.add(Integer.valueOf(temp[k]));
}
final LinearLayout ll = (LinearLayout) convertView.findViewById(R.id.ll);
// inflate slot number
String yy = period_list.get(position);
ll.addView(convertTextToImageView(width, height, (position+1)+". "+temp2[1]));
// inflate slot results
for (int p = 1; p <= 10; p++)
{
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(w,w);
btn_ball = new Button(mContext);
btn_ball.setEnabled(false);
if (tempArray.contains(p))
{
btn_ball.setBackgroundResource(R.drawable.btn_green_selector);
}
else
{
btn_ball.setBackgroundResource(R.drawable.btn_transparent_selector);
}
ll.addView(btn_ball, params);
}
return convertView;
}
}
EDIT:
public View getView(int position, View convertView, ViewGroup parent)
{
if (convertView == null)
{
convertView = mInflater.inflate(R.layout.list_item3, null);
}
String xx = Record.get(position).getResult();
String [] temp = null;
temp = xx.split("-");
ArrayList<Integer> tempArray = new ArrayList<Integer>();
for (int k=0; k<6; k++)
{
tempArray.add(Integer.valueOf(temp[k]));
}
DisplayMetrics localDisplayMetrics = getResources().getDisplayMetrics();
Constants.SCREEN_W = localDisplayMetrics.widthPixels;
Constants.SCREEN_H = localDisplayMetrics.heightPixels;
int hh = Constants.SCREEN_W/51;
int ww = Constants.SCREEN_W/51;
ImageButton btn_slot = (ImageButton) convertView.findViewById(R.id.btn_slot);
// inflate slot number
String yy = period_list.get(position);
String [] temp2 = null;
temp2 = yy.split("-");
btn_slot.setImageBitmap(convertTextToBM(Constants.SCREEN_W/25, ww, (position+1)+". "+temp2[1]));
List<ImageButton> list_btn = new ArrayList<ImageButton>();
for(int id : BUTTON_IDS)
{
ImageButton imgBtn = (ImageButton)convertView.findViewById(id);
imgBtn.setEnabled(false);
imgBtn.getLayoutParams().height = hh;
imgBtn.getLayoutParams().width = ww;
list_btn.add(imgBtn);
}
// inflate slot results
for (int p = 0; p < 49; p++)
{
if (tempArray.contains(p))
{
list_btn.get(p).setBackgroundResource(R.drawable.btn_green_selector);
list_btn.get(p).setImageResource(BUTTON_IMG[p]);
}
else
{
list_btn.get(p).setBackgroundResource(R.drawable.btn_transparent_selector);
list_btn.get(p).setImageResource(BUTTON_IMG[p]);
}
}
return convertView;
}
Question:
The results that are originally sorted in descending order in a good way. However, upon scrolling up and down the listview, the listing was changed and is no longer sorted. Some items are even repeated. Some are gone.
What is happening? Thanks!
EDIT:
I have amended the list_item3 as layout to be inflated to the listview, of which inside has 50 ImageButtons in a row. The getView
part in the adapter is amended as above. However, the results inflated are still messed after scrolling the listview up or down. How could this be solved? Thanks!