2017-08-09 1 views
4

I 2 Layouts in 1 Listenansicht anzurufendenListenansicht Artikel sind schlurfend auf blättern, wenn zwei benutzerdefinierte Layouts in Listview genannt

One ist Linear für Textview und editText und das andere ist nur ein einzelner Spinner

Wenn jedoch Ich versuche, die Elemente im linearen Layout über das Programm (Code unten) aufzurufen, die Elemente werden jedes Mal, wenn die Liste gescrollt wird, aus der Sequenz verschoben oder verschoben.

Es wird kein Fehler angezeigt, aber irgendwie passiert dies.

Ich möchte die Liste einmal aufgerufen werden und in der Reihenfolge bleiben.

Jede Hilfe ist sehr bemerkenswert. Hier unten ist mein Code

Aktivität:

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); 

      //.....many more objects 


      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; 
    } 

} 
+0

Offensichtlich ist es, weil Sie nichts in 'getView' tun, wenn' convertView ! = null' – Selvin

+0

Also was schlägst du vor? @selvin –

Antwort

4

bekam ich die Antwort, alles, was ich tun musste, war die folgenden Änderungen in dem Schaltergehäuse tun

@Override 
 
    public View getView(int position, View convertView, ViewGroup viewGroup) { 
 
     int type = getItemViewType(position); 
 
     viewHolder = new ViewHolder(); 
 
     switch (type) { 
 
      case TYPE_LIST_ITEMS: 
 
       if (convertView == null) { 
 
        convertView = layoutInflater.inflate(R.layout.fillup_details_layout, null); 
 
       } 
 
       viewHolder.txtItem = convertView.findViewById(R.id.txtFillupDetails); 
 
       ListViemItems detail_position = listViemItems.get(position); 
 
       viewHolder.txtItem.setText(detail_position.getListItems()); 
 
       break; 
 
      case TYPE_SPINNER_ITEMS: 
 
       if (convertView == null) { 
 
        convertView = layoutInflater.inflate(R.layout.fillup_details_layout_spinner, null); 
 
       } 
 
       ListViemItems detail_position2 = listViemItems.get(position); 
 
       ArrayAdapter<String> adptrSpnrItem = 
 
         new ArrayAdapter<String>(context, R.layout.spinner_item, detail_position2.getSpinnerItems()); 
 
       adptrSpnrItem.setDropDownViewResource(R.layout.spinner_item); 
 

 
       viewHolder.spinner = (Spinner) convertView.findViewById(R.id.spnrFillupDetails); 
 
       viewHolder.spinner.setAdapter(adptrSpnrItem); 
 
       break; 
 
     } 
 
     return convertView; 
 
    }

Verwandte Themen