2016-05-01 11 views
0

ich eine Aktivität haben, die Daten aus einer Datenbank abruft, die für viele Länder Informationen (Name, Hauptstadt, Bevölkerung, Flagge Bild) enthält. Das Hauptlayout hat einen EditText, um den Großbuchstaben als Eingabe und eine ListView zu nehmen. Beim Start der Aktivität werden alle Länder abgerufen und kurz in der ListView angezeigt. Wenn ich den EditText eintippe, möchte ich, dass die ListView die Länder mit dem passenden Großbuchstabennamen anzeigt. Aber was ich sehe, ist eine leere ListView. Außerdem, wenn die EditText leer ist, möchte ich die Listview alle Länder zeigen, wie es am Anfang gezeigt.android - nicht aktualisieren Listenansicht auf Änderung eines EditText Wert

Das Haupt Layout-Datei ist wie folgt:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/parentLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#FFFFFF" 
    android:orientation="vertical" > 

    <com.google.android.gms.ads.AdView 
     xmlns:ads="http://schemas.android.com/apk/res-auto" 
     android:id="@+id/adView" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     ads:adSize="SMART_BANNER" 
     ads:adUnitId="@string/banner_ad_id" 
     android:visibility="gone" /> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_above="@id/adView" 
     android:layout_marginBottom="10dp" 
     android:layout_marginLeft="10dp" 
     android:layout_marginRight="10dp" 
     android:layout_marginTop="5dp" > 



     <EditText 
      android:id="@+id/search_input_capital" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:inputType="text" 
      android:layout_alignParentTop="true" 
      android:visibility="visible" > 
     <requestFocus /> 

     </EditText> 
     <ListView 
      android:id="@+id/listView" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:cacheColorHint="#00000000" 
      android:divider="@android:color/transparent" 
      android:drawSelectorOnTop="false" 
      android:layout_below="@id/search_input_capital"> 
     </ListView> 
    </RelativeLayout> 

</RelativeLayout> 

Und der Code für die Aktivität (CapitalActivity.java) ist:

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_capital); 

     private ArrayList<Country> items; 
     private ArrayList<Country> items_all; 

     private ArrayList<Country> items_new; 

     private EfficientAdapter adapter; 
     private ListView listView; 


     EditText searchInput=(EditText)findViewById(R.id.search_input_capital); 

     items = new ArrayList<Country>(); 
     items_new = new ArrayList<Country>(); 
     listView = (ListView) findViewById(R.id.listView); 
     listView.setDividerHeight(10); 

     adapter = new EfficientAdapter(CapitalActivity.this); 
     listView.setAdapter(adapter); 

     setListItems(""); 

     searchInput.addTextChangedListener(new TextWatcher() { 

       @Override 
       public void afterTextChanged(Editable s) { 

       } 

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

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


        String searchCapital = new String(s.toString()).trim(); 

       items_new.clear(); 

       for(Country myCountry : items_all) { 

       if(myCountry.getCapital() != null && 
        myCountry.getCapital().trim().toLowerCase().contains(searchCapital)) { 

       items_new.add(myCountry); 
       } 
       } 



      items.clear(); 

      items = (ArrayList<Country>) items_new.clone(); 

      if(searchCapital.trim().isEmpty()){ 

      items = items_all; 
      } 

      adapter.notifyDataSetChanged(); 


       } 
       }); 





private void setListItems(String searchKey) { 

    items_all= DatabaseAccessor.getCountryList(CapitalActivity.this, type, typeValue, searchKey); 
    items=items_all; 

    adapter.notifyDataSetChanged(); 
} 

nur das notwendige Codesegment oben gezeigt wurde. Was soll ich tun, um das Ziel zu erreichen?

EDIT1: Ich habe den EfficientAdapter Implementierungsteil in dem Code, der oben eingefügt wurde, größtenteils weggelassen. Allerdings bin Einfügen ich zu, dass Code diesmal:

public class EfficientAdapter extends BaseAdapter { 
     private LayoutInflater mInflater; 
     private Context context; 

     public EfficientAdapter(Context context) { 
      mInflater = LayoutInflater.from(context); 
      this.context = context; 
     } 

     public View getView(final int position, View convertView, ViewGroup parent) { 
      ViewHolder holder; 
      if (convertView == null) { 
       convertView = mInflater.inflate(R.layout.country_container, null); 
       holder = new ViewHolder(); 

       holder.nameView = (TextView) convertView.findViewById(R.id.nameView); 
       holder.continentView = (TextView) convertView.findViewById(R.id.continentView); 
       holder.imageView = (ImageView) convertView.findViewById(R.id.imageView); 
       holder.detailsView = (TextView) convertView.findViewById(R.id.detailsView); 
       convertView.setTag(holder); 
      } else { 
       holder = (ViewHolder) convertView.getTag(); 
      } 

      OnClickListener ocl = new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        Intent intent = new Intent(CapitalActivity.this, CountryLearningActivity.class); 
        intent.putExtra(Constants.KEY_COUNTRY, items); 
        intent.putExtra(Constants.KEY_INDEX, position); 
        startActivity(intent); 
       } 
      }; 

      Country item = items.get(position); 
      holder.nameView.setText(item.getCountry()); 
      if (type.equalsIgnoreCase(filters[0]) || type.equalsIgnoreCase(filters[1]) 
        || type.equalsIgnoreCase(filters[2])) { 
       holder.continentView.setText(item.getContinent()); 
      } else if (type.equalsIgnoreCase(filters[3])) { 
       holder.continentView.setText(Html 
         .fromHtml("Area: " + formatter.format(Double.parseDouble(item.getArea())) + " km<sup>2</sup>")); 
      } else if (type.equalsIgnoreCase(filters[4])) { 
       holder.continentView.setText("Population : " + item.getPopulation()); 
      } 
      holder.imageView.setImageResource(Utils.getResID(CapitalActivity.this, item.getFlag())); 
      holder.detailsView.setOnClickListener(ocl); 
      convertView.setOnClickListener(ocl); 

      return convertView; 
     } 

     class ViewHolder { 
      TextView nameView; 
      ImageView imageView; 
      TextView continentView; 
      TextView detailsView; 
     } 

     @Override 
     public long getItemId(int position) { 
      return 0; 
     } 

     @Override 
     public int getCount() { 
      return items.size(); 
     } 

     @Override 
     public Object getItem(int position) { 
      return items.get(position); 
     } 
    } 
+0

Es wäre besser zu verstehen, wenn Sie CapitalActivity vollständigen Code posten. – Masum

+0

@Masum, 'EDIT1' hinzugefügt –

Antwort

0

öffnen nur teh gleichen Seite von der aktuellen Seite für den Code unten

enter cod protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_capital); 

    private ArrayList<Country> items; 
    private ArrayList<Country> items_all; 

    private ArrayList<Country> items_new; 

    private EfficientAdapter adapter; 
    private ListView listView; 


    EditText searchInput=(EditText)findViewById(R.id.search_input_capital); 

    items = new ArrayList<Country>(); 
    items_new = new ArrayList<Country>(); 
    listView = (ListView) findViewById(R.id.listView); 
    listView.setDividerHeight(10); 

    adapter = new EfficientAdapter(CapitalActivity.this); 
    listView.setAdapter(adapter); 

    setListItems(""); 

    searchInput.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void afterTextChanged(Editable s) { 

      } 

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

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


       String searchCapital = new String(s.toString()).trim(); 

      items_new.clear(); 

      for(Country myCountry : items_all) { 

      if(myCountry.getCapital() != null && 
       myCountry.getCapital().trim().toLowerCase().contains(searchCapital)) { 

      items_new.add(myCountry); 
      } 
      } 



     items.clear(); 

     items = (ArrayList<Country>) items_new.clone(); 

     if(searchCapital.trim().isEmpty()){ 

     items = items_all; 
     } 

     adapter.notifyDataSetChanged(); 


      } 
      }); 

private void setListItems (String SearchKey) {

items_all= DatabaseAccessor.getCountryList(CapitalActivity.this, type, typeValue, searchKey); 
items=items_all; 

adapter.notifyDataSetChanged(); 

} e hier

+0

, was Sie geändert haben? –

Verwandte Themen