2017-07-27 3 views
1

Ich arbeite an Android-Anwendung, ich habe eine benutzerdefinierte Listenansicht mit Kontrollkästchen, ich kann Kontrollkästchen aktivieren und ausgewählte Werte erhalten. aber wenn ich versuche, eine bestimmte Namen Anwendung abstürzt.Android Benutzerdefinierte ListView Suche mit CheckBoxen, Filter funktioniert nicht

Hier ist mein Code, ich denke, ich vermisse etwas.

public class MyAdapter extends BaseAdapter { 
    private ArrayList<InfoRowdata> arraylisto; 
    private List<InfoRowdata> worldlist = null; 

    Context mContext; 
    LayoutInflater inflater; 

    public MyAdapter(Context context, List<InfoRowdata> worldpopulationlist) { 
     mContext = context; 
     inflater = LayoutInflater.from(mContext); 
     this.worldlist = worldpopulationlist; 

     this.arraylisto = new ArrayList<InfoRowdata>(); 
     this.arraylisto.addAll(worldpopulationlist); 

    } 

    public class ViewHolder { 
     TextView Name; 
     CheckBox cb; 

    } 
    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return data.length; 
    } 

    @Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return worldlist.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 

public View getView(final int position, View view, ViewGroup parent) { 
final ViewHolder holder; 
if (view == null) { 
    holder = new ViewHolder(); 
    view = inflater.inflate(R.layout.creditunionrow, null); 
    // Locate the TextViews in listview_item.xml 
    holder.Name = (TextView) view.findViewById(R.id.label); 
    holder.cb = (CheckBox) view.findViewById(R.id.check); 

    view.setTag(holder); 
} else { 
    holder = (ViewHolder) view.getTag(); 
} 
// Set the results into TextViews 
holder.Name.setText(worldlist.get(position).getName()); 
// holder.cb.setChecked(worldlist.get(position).getChecked()); 


holder.cb.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     Selection = ""; 
       count=0; 
       String selecteditems = ""; 
       // TODO Auto-generated method stub 
       if (infodata.get(position).isclicked) { 
        infodata.get(position).isclicked = false; 

       } else { 
        infodata.get(position).isclicked = true; 
       } 
       for (int i = 0; i < infodata.size(); i++) { 
        if (infodata.get(i).isclicked) { 
        //System.out.println("Selectes Are == "+ data[i]); 
         selecteditems = selecteditems + data[i] + ","; 
        count++; 
        } 
       } 
       System.out.println("Selected Are == " + selecteditems); 
       Selection = selecteditems; 
      } 



}); 
if (infodata.get(position).isclicked) { 

    holder.cb.setChecked(true); 
} else { 
    holder.cb.setChecked(false); 
} 




// Listen for ListView Item Click 
view.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View arg0) { 

    } 
}); 

return view; 
} 

    // Filter Class 
    public void filter(String charText) { 
     charText = charText.toLowerCase(Locale.getDefault()); 
     worldlist.clear(); 
     if (charText.length() == 0) { 
      worldlist.addAll(arraylisto); 
     } else { 
      for (InfoRowdata wp : arraylisto) { 
       if (wp.getName().toLowerCase(Locale.getDefault()) 
         .contains(charText)) { 
        worldlist.add(wp); 
       } 
      } 
     } 
     notifyDataSetChanged(); 
    } 

} 

hier ist meine Model-Klasse

public class InfoRowdata { 

public boolean isclicked=false; 
public int index; 
public String name; 
/*public String strAmount;*/ 

public InfoRowdata(boolean isclicked,int index,String name/*,String strAmount*/) 
{ 
    this.index=index; 
    this.isclicked=isclicked; 
    this.name=name; 
    /*this.strAmount=strAmount;*/ 
} 


public String getName() { 
    return this.name; 
} 

public void setName(String name) { 
    this.name = name; 
} 


public Boolean getChecked() { 
    return isclicked; 
} 

public void setChecked(Boolean checked) { 
    this.isclicked = checked; 
} 

}

Die Ausnahme Ich erhalte:

                java.lang.IndexOutOfBoundsException: Invalid index 2, size is 2 
                     at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) 
                     at java.util.ArrayList.get(ArrayList.java:308) 
                     at My.Profile.activity.UnionActivity$MyAdapter.getView(UnionActivity.java:240) 
                     at android.widget.AbsListView.obtainView(AbsListView.java:2346) 
                     at android.widget.ListView.measureHeightOfChildren(ListView.java:1281) 
                     at android.widget.ListView.onMeasure(ListView.java:1188) 
                     at android.view.View.measure(View.java:18794) 
                     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 
                     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465) 
                     at android.widget.LinearLayout.measureVertical(LinearLayout.java:748) 
                     at android.widget.LinearLayout.onMeasure(LinearLayout.java:630) 
                     at android.view.View.measure(View.java:18794) 
                     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 
                     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465) 
                     at android.widget.LinearLayout.measureVertical(LinearLayout.java:748) 
                     at android.widget.LinearLayout.onMeasure(LinearLayout.java:630) 
                     at android.view.View.measure(View.java:18794) 
                     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 
                     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465) 
                     at android.widget.LinearLayout.measureVertical(LinearLayout.java:748) 
                     at android.widget.LinearLayout.onMeasure(LinearLayout.java:630) 
                     at android.view.View.measure(View.java:18794) 
                     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 
                     at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
                     at android.view.View.measure(View.java:18794) 
                     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 
                     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465) 
                     at android.widget.LinearLayout.measureVertical(LinearLayout.java:748) 
                     at android.widget.LinearLayout.onMeasure(LinearLayout.java:630) 
                     at android.view.View.measure(View.java:18794) 
                     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 
                     at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
                     at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2643) 
                     at android.view.View.measure(View.java:18794) 
                     at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2100) 
                     at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1216) 
                     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1452) 
                     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107) 
                     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013) 
                     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858) 
                     at android.view.Choreographer.doCallbacks(Choreographer.java:670) 
                     at android.view.Choreographer.doFrame(Choreographer.java:606) 
                     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844) 
                     at android.os.Handler.handleCallback(Handler.java:739) 
                     at android.os.Handler.dispatchMessage(Handler.java:95) 
                     at android.os.Looper.loop(Looper.java:148) 
                     at android.app.ActivityThread.main(ActivityThread.java:5417) 
                     at java.lang.reflect.Method.invoke(Native Method) 
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

Dies ist, wie ich bin Searchin g Listenansicht mit EditText:

inputSearch.addTextChangedListener(new TextWatcher() 
    { 
     public void afterTextChanged(Editable s) 
     { 
      //Abstract Method of TextWatcher Interface. 
     } 
     public void beforeTextChanged(CharSequence s,int start, int count, int after) 
     { 

     } 
     public void onTextChanged(CharSequence s,int start, int before, int count) 
     { 



      String text = inputSearch.getText().toString().toLowerCase(Locale.getDefault()); 
      adapter.filter(text); 
     } 
    }); 

Ich weiß nicht, wo ich bin etwas fehlt, ich zufällig Kontrollkästchen überprüfen möchten und auch auf sie mit der richtigen Referenz geprüft Kontrollkästchen Suche anwenden, erstens war ich nicht tun es mit benutzerdefinierten Adapter , die Suche war dort gut, aber ich verlor den checked state von checkboxes, wenn Suche angewendet wird, jetzt benutze ich customadapter, wie kann ich korrekten Verweis der Kontrolle Kästen auf dem Suchen listview erhalten. Ich werde sehr dankbar für jede Hilfe, ich hatte fast zwei Tage in diesem, und durchsuchen Sie das ganze Internet, aber konnte kein Beispiel, das Listview mit Checkboxen und Suchfunktion implementiert.

Antwort

0

Die java.util.ArrayList.addAll (Sammlung c) Methode alle Elemente in der angegebenen Sammlung dieser Liste an das Ende anfügt, in der Reihenfolge, dass sie durch die angegebene Sammlung Iterator zurückgegeben .

FALSCH

this.arraylisto = new ArrayList<InfoRowdata>(); 
    this.arraylisto.addAll(worldpopulationlist); // Problem Here 

Rechts

this.arraylisto = new ArrayList<InfoRowdata>(); 
this.arraylisto.addAll(worldlist); // Rectify here 

Und

@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return worldlist.size(); 
} 
+1

Groß das funktionierte, Jetzt bin keine Ausnahme, die ich immer und Suche funktioniert, vielen Dank. aber ich habe immer noch Probleme mit checked state checkboxes, wenn Sie einen Hinweis geben können, wie Sie Checkboxen während der Suche verfolgen können – user6768912

0

ersten onClickListener auf CheckBox nicht setOnCheckedChangeListener Gebrauch verwenden, zweiter haben Sie auf leere Liste versuchen beantworten @IntelliJ Amiya

Verwandte Themen