I call 2 layouts in 1 Listview
One of them is Linear for textView and editText, and the other is only one spinner
However, when I try to call items in a linear layout through a program (code is below), the items are shuffled or moved out of sequence each time the list scrolls.
The error is illustrated, but somehow it happens.
I want the list to be called once and stay in sequence.
Any help is very noticeable. Here is my code below
Activity:
Fillup_Details.java
public class Fillup_Details extends AppCompatActivity {
private ListView listView;
Spinner spinner;
ArrayList<ListViemItems> listViemItemses;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fillup__details);
listView = (ListView) findViewById(R.id.listFillupDetails);
spinner = (Spinner) findViewById(R.id.spnrFillupDetails);
setTitle("Fill-Up Details");
loadFillupDetails();
}
public void loadFillupDetails() {
listViemItemses = new ArrayList<ListViemItems>();
ListViemItems items1 = new ListViemItems();
items1.setListItems("ListItem1");
items1.setOddoreven(0);
listViemItemses.add(items1);
ListViemItems items2 = new ListViemItems();
items2.setListItems("ListItem2");
items2.setOddoreven(0);
listViemItemses.add(items2);
ListViemItems itemspnr = new ListViemItems();
itemspnr.setSpinnerItems("Spinner1");
itemspnr.setOddoreven(1);
listViemItemses.add(itemspnr);
FillupDetailsList fillupDetailsList = new FillupDetailsList(Fillup_Details.this, listViemItemses);
listView.setAdapter(fillupDetailsList);
}
}
Adapter
FillupDetailsList.java
class FillupDetailsList extends BaseAdapter {
private static final String TAGGGG = "FillupDetailsList";
Context context;
String[] spnrItemasas =new String[]{"a","b"} ;
LayoutInflater layoutInflater =null;
View view;
ViewHolder viewHolder;
ArrayList<ListViemItems> listViemItems;
int type;
private static final int TYPE_LIST_ITEMS = 0;
private static final int TYPE_SPINNER_ITEMS= 1;
public FillupDetailsList(Context context, ArrayList<ListViemItems> listViemItems) {
super();
this.context = context;
this.listViemItems=listViemItems;
layoutInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return listViemItems.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
class ViewHolder{
Spinner spinner;
TextView txtItem;
EditText edtTextItem;
int ref;
}
@Override
public int getItemViewType(int position) {
if(listViemItems.get(position).getOddoreven()==0){
type=TYPE_LIST_ITEMS;
}else if(listViemItems.get(position).getOddoreven()==1){
type=TYPE_SPINNER_ITEMS;
}
return type;
}
@Override
public int getViewTypeCount() {
return 5;
}
@Override
public View getView(int position, View convertView, ViewGroup viewGroup) {
if(convertView==null){
int type = getItemViewType(position);
Log.d(TAGGGG, "getView " + position + " " + convertView + " type = " + type);
viewHolder = new ViewHolder();
switch (type){
case TYPE_LIST_ITEMS:
convertView = layoutInflater.inflate(R.layout.fillup_details_layout,null);
viewHolder.txtItem = (TextView) convertView.findViewById(R.id.txtFillupDetails);
viewHolder.edtTextItem = (EditText) convertView.findViewById(R.id.edtFillupDetails);
viewHolder.txtItem.setText(listViemItems.get(position).getListItems());
break;
case TYPE_SPINNER_ITEMS:
ArrayList<String> as = new ArrayList<String>();
ArrayAdapter<String> adptrSpnrItem = new ArrayAdapter<String>(context, R.layout.spinner_item, spnrItemasas);
adptrSpnrItem.setDropDownViewResource(R.layout.spinner_item);
convertView = layoutInflater.inflate(R.layout.fillup_details_layout_spinner,viewGroup,false);
viewHolder.spinner = (Spinner)convertView.findViewById(R.id.spnrFillupDetails);
viewHolder.spinner.setAdapter(adptrSpnrItem);
break;
default:
break;
}
convertView.setTag(viewHolder);
}else {
viewHolder= (ViewHolder) convertView.getTag();
}
return convertView;
}
}
source
share