2015-07-29 2 views
0

Я прочитал форумы, и я не могу понять, как получить позицию выбранного элемента, чтобы соответствовать элементам списка массива, поскольку listview доступен для поиска. Он отлично работает до тех пор, пока я не поискаю, тогда мои предметы не совпадают. Может ли кто-нибудь предоставить точный пример?Изменения в Listview Id

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


    } 
+0

Рассмотрите возможность добавления тега для android, чтобы получить лучшие ответы – JohanShogun

+0

Есть идеи? Спасибо –

+0

Мне кажется, что вы не отслеживаете, что вы показываете в опубликованных результатах. – JohanShogun

ответ

1

Было бы приемлемым расширить объект Country, чтобы он содержал идентификатор/индекс?

Если да, это будет храниться полностью, и вы можете вернуть его обратно в onItemClick для ListView.

Если нет, вы можете создать обертку вокруг объекта «Страна» и либо передать ее адаптеру, либо адаптировать конструктор списка оберток.

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

Да, я на самом деле просто расширил список своей страны и включил все свои предметы. Я также добавлю индекс Id.