列表视图 ID 更改

Listview Id Changes

我已经通读了论坛,但我似乎无法弄清楚如何让所选项目的位置与我的数组列表项目相匹配,因为列表视图是可搜索的。在我搜索然后我的项目不匹配之前,它一直很好用。有人可以提供一个确切的例子吗?

private void displayListView() {
        ArrayList<Country> countryList = new ArrayList<Country>();

        //countryList.clear();


        // int j=1;
        for (int i = 0; i < categoriesList.size(); i++) {

            //list.add(new ItemData(categoriesList.get(i).getName(), R.drawable.ic_launcher));

            //Array list of countries

            Country country = new Country(workordertypeId.get(i),ActualCity.get(i),ClientName.get(i),
                    ProjectNotes.get(i), ProjectStart.get(i),ProjectFieldNotes.get(i),ProjectStatus.get(i));
            countryList.add(country);


            ///////list.add(new StringWithTag(categoriesList.get(i).getName(),categoriesList2.get(i).getName()));
            //list.add(new ItemData("testthis",R.drawable.logolong4));

        }






        //create an ArrayAdaptar from the String Array
        dataAdapter = new MyCustomAdapter(this,
                R.layout.country_info, countryList);
        ListView listView = (ListView) findViewById(R.id.listView1);
        // Assign adapter to ListView
        listView.setAdapter(dataAdapter);

        //enables filtering for the contents of the given ListView
        listView.setTextFilterEnabled(true);
        //listView.has

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                // When clicked, show a toast with the TextView text
                setwoindex(position);
                //setwoindex (parent.getSelectedItemPosition());
                //listView.getItemId(position)
                Country country = (Country) parent.getItemAtPosition(position);
                //Toast.makeText(getApplicationContext(),
                //country.getCode(), Toast.LENGTH_SHORT).show();
                //Toast.makeText(getApplicationContext(),
                //country.getRegion(), Toast.LENGTH_SHORT).show();


                String haspdf = getIntent().getExtras().getString("haspdf", "defaultKey");

                if (haspdf.equals("1")) {
                    //counter++;
                    btnAddNewCategory.setText("Save PDF");
                    btnAddNewCategory.setEnabled(true);
                } else if (haspdf.equals("0")) {
                    btnAddNewCategory.setEnabled(false);
                }
                if (haspdf.equals("3")) {
                    //counter++;
                    btnAddNewCategory.setText("Save Image");
                    btnAddNewCategory.setEnabled(true);
                } else if (haspdf.equals("0")) {
                    btnAddNewCategory.setEnabled(false);
                }

                //updateGUI();
                //Toast.makeText(getBaseContext(), "test",   Toast.LENGTH_SHORT).show();
                //spinnerFood.setTag(pos);
                if (getwoindex() != null) {
                   // punchin.setEnabled(true);
                    Viewattachments.setEnabled(true);

                    //punchin.setEnabled(true);
                    // punchout.setEnabled(true);
                    //btnAddNewCategory.setEnabled(true);


                    int index = getwoindex();


                    //Toast.makeText(getBaseContext(),"WorkOrderNumber Toasting="+ workordertypeId.get(index).toString() +" "+ClientName.get(index).toString()+" "+ActualCity.get(index).toString()+" "+ClientPhone.get(index).toString(), Toast.LENGTH_SHORT).show();
                    FullAddress.setText(WoClientName.get(index).toString() + "\n" + WoClientStreet.get(index).toString() + "\n" + ActualCity.get(index).toString() + " " + WoClientState.get(index).toString() + " " + WoClientZip.get(index).toString());
                    ActualPhone.setText(WoClientPhone.get(index).toString());
                    String IdUser = getIntent().getStringExtra("IdUser");
                    String usernameforlogin = getIntent().getStringExtra("usernameforlogin");

                    mrcastrovinci();
                }

            }


        });

        EditText myFilter = (EditText) findViewById(R.id.myFilter);
        myFilter.addTextChangedListener(new TextWatcher() {

            public void afterTextChanged(Editable s) {
            }

            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            public void onTextChanged(CharSequence s, int start, int before, int count) {
                dataAdapter.getFilter().filter(s.toString());
            }
        });

    }

    private class MyCustomAdapter extends ArrayAdapter<Country> {

        private ArrayList<Country> originalList;
        private ArrayList<Country> countryList;
        private CountryFilter filter;

        public MyCustomAdapter(Context context, int textViewResourceId,
                               ArrayList<Country> countryList) {
            super(context, textViewResourceId, countryList);
            this.countryList = new ArrayList<Country>();
            this.countryList.addAll(countryList);
            this.originalList = new ArrayList<Country>();
            this.originalList.addAll(countryList);
        }


        @Override
        public boolean hasStableIds() {
            return true;
        }

        @Override
        public android.widget.Filter getFilter() {
            if (filter == null){
                filter  = new CountryFilter();
            }
            return filter;
        }


        private class ViewHolder {
            TextView code;
            TextView name;
            TextView continent;
            TextView region;
            TextView Dated;
            TextView ProjectFieldNotes;
            TextView ProjectStatus;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            ViewHolder holder = null;
            Log.v("ConvertView", String.valueOf(position));
            if (convertView == null) {

                LayoutInflater vi = (LayoutInflater)getSystemService(
                        Context.LAYOUT_INFLATER_SERVICE);
                convertView = vi.inflate(R.layout.country_info, null);

                holder = new ViewHolder();
                holder.code = (TextView) convertView.findViewById(R.id.code);
                holder.name = (TextView) convertView.findViewById(R.id.name);
                holder.continent = (TextView) convertView.findViewById(R.id.continent);
                holder.region = (TextView) convertView.findViewById(R.id.region);
                holder.Dated = (TextView) convertView.findViewById(R.id.dated);
                holder.ProjectFieldNotes = (TextView) convertView.findViewById(R.id.ProjectFieldNotes);
                holder.ProjectStatus = (TextView) convertView.findViewById(R.id.ProjectStatus);




                convertView.setTag(holder);

            } else {
                holder = (ViewHolder) convertView.getTag();
            }

            Country country = countryList.get(position);
            holder.code.setText(country.getCode());
            holder.name.setText(country.getName());
            holder.continent.setText(country.getContinent());
            holder.region.setText(country.getRegion());
            holder.Dated.setText(country.getDated());
            holder.ProjectFieldNotes.setText(country.getProjectFieldNotes());
            holder.ProjectStatus.setText(country.getProjectStatus());

            return convertView;

        }

        private class CountryFilter extends android.widget.Filter
        {

            @Override
            protected FilterResults performFiltering(CharSequence constraint) {

                constraint = constraint.toString().toLowerCase();
                FilterResults result = new FilterResults();
                if(constraint != null && constraint.toString().length() > 0)
                {
                    ArrayList<Country> filteredItems = new ArrayList<Country>();

                    for(int i = 0, l = originalList.size(); i < l; i++)
                    {
                        Country country = originalList.get(i);
                        if(country.toString().toLowerCase().contains(constraint))
                            filteredItems.add(country);
                    }
                    result.count = filteredItems.size();
                        result.values = filteredItems;
            }
            else
            {
                synchronized(this)
                {
                    result.values = originalList;
                    result.count = originalList.size();
                }
            }
            return result;
            //setwoindex(ListView1.getSelectedItemPosition());

            }






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

                countryList = (ArrayList<Country>)results.values;
                notifyDataSetChanged();
                clear();
                for(int i = 0, l = countryList.size(); i < l; i++)
                    add(countryList.get(i));
                notifyDataSetInvalidated();
            }
        }


    }

扩展 Country 对象以包含 id/index 是否可以接受?

如果是,那将一直存储,您可以在 onItemClick 中为您的 ListView 取回它。

如果没有,您可以围绕 Country 对象构建一个包装器,然后将其提供给适配器或让适配器构建一个包装器列表。

public class MyWrapper {
    public Country mCountry;
    public int mOriginalIndex;
}

是的,我实际上只是扩展了我的国家/地区列表并将我的所有项目都包含在其中。我也会添加一个索引 ID。