Search Custom Adapter

I

IIIGeorgeIII

Neues Mitglied
1
Guten Tag
Ich hoffe ihr könnt mir Helfen

Habe ein Filter für Search ListView erstellt, das Problem ist es funktioniert nicht, komme einfach nicht mehr weiter :-(

Code:
public class PzCustomAdapter extends BaseAdapter implements Filterable {


    String[] name,einheit;
    private List<String>filteredData = null;
    Context context;
    int [] imageId;
    private static LayoutInflater inflater=null;

    public PzCustomAdapter(MainActivityPz mainActivity, String[] prgmNameList, int[] prgmImages, String[] prgmNameEinheit) {
        // TODO Auto-generated constructor stub
        name=prgmNameList;
        einheit=prgmNameEinheit;
        context=mainActivity;
        imageId=prgmImages;
        inflater = ( LayoutInflater )context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return name.length;
    }

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

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

            /* (non-Javadoc)
             * @see android.widget.Filter#performFiltering(java.lang.CharSequence)
             */
            @Override
            protected FilterResults performFiltering(CharSequence constraint) {
                // TODO Auto-generated method stub
            /*
             * Here, you take the constraint and let it run against the array
             * You return the result in the object of FilterResults in a form
             * you can read later in publichResults.
             */
                constraint = constraint.toString().toLowerCase();
                FilterResults result = new FilterResults();
                ArrayList<String> f = new ArrayList<String>();
                ArrayList<String> p = new ArrayList<String>();
                for(String product : name){
                    p.add(product);
                }
                if(constraint != null && constraint.toString().length() > 0)
                {
                    for(int i = 0; i < p.size(); i++)
                    {
                        String product = p.get(i);
                        if(product.toLowerCase().contains(constraint))
                            f.add(product);
                    }
                    result.count = f.size();
                    result.values = f;
                }
                else
                {
                    result.values = p;
                    result.count = p.size();
                }
                return result;
            }

            /* (non-Javadoc)
             * @see android.widget.Filter#publishResults(java.lang.CharSequence, android.widget.Filter.FilterResults)
             */
            @Override
            protected void publishResults(CharSequence constraint, FilterResults results) {
                // TODO Auto-generated method stub
            /*
             * Here, you take the result, put it into Adapters array
             * and inform about the the change in data.
             */
                filteredData = (ArrayList<String>) results.values;
                notifyDataSetChanged();

            }

        };
    }


    public class Holder
    {
        TextView tv,tv2;
        ImageView img;
    }
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        Holder holder=new Holder();
        View rowView;
        rowView = inflater.inflate(R.layout.listviewpz_layout, null);
        holder.tv=(TextView) rowView.findViewById(R.id.txtpz);
        holder.tv2=(TextView) rowView.findViewById(R.id.curpz);
        holder.img=(ImageView) rowView.findViewById(R.id.flagpz);

        holder.tv.setText(name[position]);
        holder.tv2.setText(einheit[position]);
        holder.img.setImageResource(imageId[position]);

        rowView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Toast.makeText(context, ""+name[position], Toast.LENGTH_LONG).show();

                if (prgmNameList[position].equals("Mars II")){
                    Intent intent = new Intent(context, MarszweiActivity.class);
                    context.startActivity(intent);
                }



            }
        });

        return rowView;
    }

Code:
public class MainActivityPz extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {

    private static final String TAG = MainActivityPz.class.getSimpleName();


    ListView lv;
    Context context;
    PzCustomAdapter adapter;


    public static int[] prgmImages = {
            R.drawable.fuchs,
            R.drawable.boxer,
            R.drawable.dingoeins,
            R.drawable.biber,
            R.drawable.dingozweigeazwei,
            R.drawable.dingozweigsi,
            R.drawable.fennek,
            R.drawable.leopard,
            R.drawable.marder,
            R.drawable.marszwei};

    public static String[] prgmNameList = {
            "Fuchs",
            "Boxer",
            "Dingo I",
            "Biber",
            "Dingo 2 GE A2",
            "Dingo 2 GE C1 GSI",
            "Fennek STF Lu/Bo",
            "Leopard 2",
            "Spz Marder",
            "Mars II"
    };

    public static String[] prgmNameEinheit = {
            "Kpf",
            "Kpf",
            "Kpf",
            "Pionier",
            "Kpf",
            "Inst",
            "Aufklärer",
            "Kpf",
            "Kpf",
            "Artillerie"
    };
    /**
     * ATTENTION: This was auto-generated to implement the App Indexing API.
     * See https://g.co/AppIndexing/AndroidStudio for more information.
     */
    private GoogleApiClient client;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activitypz_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar8);
        setSupportActionBar(toolbar);

        context = this;

        lv = (ListView) findViewById(R.id.list4);
        adapter = new PzCustomAdapter(this, prgmNameList, prgmImages, prgmNameEinheit);
        lv.setAdapter(adapter);

        lv.setTextFilterEnabled(true);


        Log.v(TAG, "ausführliche Protokollierung, nicht in Produktion verwenden");
        Log.d(TAG, "Debug-Ausgaben");
        Log.i(TAG, "Informationen");
        Log.w(TAG, "Warnung");
        Log.e(TAG, "Fehler");


        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout8);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.setDrawerListener(toggle);
        toggle.syncState();

        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view8);
        navigationView.setNavigationItemSelectedListener(this);
        // ATTENTION: This was auto-generated to implement the App Indexing API.
        // See https://g.co/AppIndexing/AndroidStudio for more information.
        client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
    }


    @Override
    public void onBackPressed() {
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout8);
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.main, menu);

        getMenuInflater().inflate(R.menu.search_main, menu);

        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();

        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));


        SearchView.OnQueryTextListener textChangeListener = new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextChange(String newText) {

                // this is your adapter that will be filtered


                adapter.getFilter().filter(newText);
                System.out.println("on text chnge text: "+newText);


                return true;
            }

            @Override
            public boolean onQueryTextSubmit(String query) {
                // this is your adapter that will be filtered


                return true;
            }
        };
        searchView.setOnQueryTextListener(textChangeListener);


        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {


            case R.id.ueber:

                AlertDialog.Builder alert = new AlertDialog.Builder(this);


                alert.setTitle("Über");
                alert.setMessage("Datenschutzerklärung:");

// Set an EditText view to get user input
                final TextView input = new TextView(this);
                alert.setView(input);


                input.setGravity(Gravity.CENTER_HORIZONTAL);
                input.setText(R.string.uebertextpopup);


                alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {


                    }
                });

                alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        // Canceled.
                    }
                });

                alert.show();
                return true;


            default:
                return super.onContextItemSelected(item);


        }


    }


    @Override
    public boolean onNavigationItemSelected(MenuItem item) {

        int id = item.getItemId();

        if (id == R.id.nav_home) {

            Intent radfahrzeuge = new Intent(this, MainActivity.class);
            startActivity(radfahrzeuge);

        } else if (id == R.id.nav_pkw) {

            Intent radfahrzeuge = new Intent(this, MainActivityPkw.class);
            startActivity(radfahrzeuge);

        } else if (id == R.id.nav_lkw) {

            Intent radfahrzeuge = new Intent(this, MainActivityLkw.class);
            startActivity(radfahrzeuge);

        } else if (id == R.id.nav_anheunger) {
            Intent anheunger = new Intent(this, MainActivityAnheunger.class);
            startActivity(anheunger);

        } else if (id == R.id.nav_pz) {
            Intent rechner = new Intent(this, MainActivityPz.class);
            startActivity(rechner);

        } else if (id == R.id.nav_rechner) {
            Intent rechner = new Intent(this, ZurrmittelActivity.class);
            startActivity(rechner);
        } else if (id == R.id.nav_map) {
            Intent rechner = new Intent(this, MainActivityMap.class);
            startActivity(rechner);
        }

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout8);
        drawer.closeDrawer(GravityCompat.START);

        return false;
    }


    /**
     * ATTENTION: This was auto-generated to implement the App Indexing API.
     * See https://g.co/AppIndexing/AndroidStudio for more information.
     */
    public Action getIndexApiAction() {
        Thing object = new Thing.Builder()
                .setName("MainActivityPz Page") // TODO: Define a title for the content shown.
                // TODO: Make sure this auto-generated URL is correct.
                .setUrl(Uri.parse("http://[ENTER-YOUR-URL-HERE]"))
                .build();
        return new Action.Builder(Action.TYPE_VIEW)
                .setObject(object)
                .setActionStatus(Action.STATUS_TYPE_COMPLETED)
                .build();
    }

    @Override
    public void onStart() {
        super.onStart();

        // ATTENTION: This was auto-generated to implement the App Indexing API.
        // See https://g.co/AppIndexing/AndroidStudio for more information.
        client.connect();
        AppIndex.AppIndexApi.start(client, getIndexApiAction());
    }

    @Override
    public void onStop() {
        super.onStop();

        // ATTENTION: This was auto-generated to implement the App Indexing API.
        // See https://g.co/AppIndexing/AndroidStudio for more information.
        AppIndex.AppIndexApi.end(client, getIndexApiAction());
        client.disconnect();
    }
}
 
Hallo,

genauer Angaben wären nicht schlecht, wo genau ist das Problem. Filter er gar nicht, oder Filter er zu viel weg, LogCat ausgaben wenn die App Beendet wird, oder oder oder..

Gruß
 
@123thomas

Hi, der Filtert gar nicht :-(

Die Liste bleibt unverändert

App Stürzt auch nicht ab
 
du verwendest dein filteredData ja gar nicht, wie soll denn da was passieren?
Zumindest nicht im gezeigten Code.
 
@deek

Danke schon mal für deine Antwort , habe jetzt eine DetailsData Class erstellt und den getFilter angepasst, trotzdem kein Erfolg ;-( hast du eine Idee wie ich das zum Laufen bekomme ?

Code:
public class PzDetailsData {

    String pznamen;
    String pzeinheit;
    int pzpicture;

    public PzDetailsData() {
        super();
        this.pznamen = pznamen;
        this.pzeinheit = pzeinheit;
        this.pzpicture = pzpicture;
    }

    public String getPznamen() {
        return pznamen;
    }
    public void setPznamen(String pznamen) {
        this.pznamen = pznamen;
    }
    public String getPzeinheit(){
        return pzeinheit;
    }
    public  void setPzeinheit(String pzeinheit){
        this.pzeinheit = pzeinheit;
    }
    public int getPzpicture() {
        return pzpicture;
    }
    public void setPzpicture(int pzpicture) {
        this.pzpicture = pzpicture;
    }
}

Code:
@Override
    public Filter getFilter() {

        if(valueFilter == null){
            valueFilter = new ValueFilter();
        }

        return valueFilter;
    }

    private class ValueFilter extends Filter {


        @Override
        protected FilterResults performFiltering(CharSequence constraint) {

            FilterResults filterResults = new FilterResults();
            ArrayList<PzDetailsData> tempList=new ArrayList<PzDetailsData>();
            //constraint is the result from text you want to filter against.
            //objects is your data set you will filter from
            if(constraint != null && objects!=null) {
                int length=objects.size();
                int i=0;
                while(i<length){
                    PzDetailsData item=objects.get(i);
                    //do whatever you wanna do here
                    //adding result set output array

                    tempList.add(item);

                    i++;
                }
                //following two lines is very important
                //as publish result can only take FilterResults objects
                filterResults.values = tempList;
                filterResults.count = tempList.size();
            }
            return filterResults;
        }

        @SuppressWarnings("unchecked")
        @Override
        protected void publishResults(CharSequence charSequence, FilterResults results) {

            objects = (ArrayList<PzDetailsData>) results.values;
            if (results.count > 0) {
                notifyDataSetChanged();
            } else {
                notifyDataSetInvalidated();
            }

        }

    };
 
Zuletzt bearbeitet:
Filter Funktioniert jetzt ;-)
 

Ähnliche Themen

J
  • JBru
Antworten
1
Aufrufe
824
jogimuc
J
J
Antworten
2
Aufrufe
986
justinh13
J
F
Antworten
3
Aufrufe
763
Feuerstern
F
Zurück
Oben Unten