Implementieren von getfilter () mit einem benutzerdefinierten Adapter, der den Basisadapter erweitert

Hier ist meine Haupttätigkeit

package com.javacodegeeks.android.lbs;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;
import lbs.promotion.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.apache.http.NameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;

public class Curve extends Activity {

    private ProgressDialog pDialog;
     JSONParser jParser = new JSONParser();
     ArrayList<HashMap<String, String>> DaftarPromotion = new ArrayList<HashMap<String, String>>();

     private static String url_daftar_promotion = "http://10.0.2.2/webserver_maaug/promotion/daftar_promotion.php";

     String lon = "101.5178";
     String lat = "3.0724";

     public static final String TAG_SUCCESS = "success";
     public static final String TAG_DAFTAR_PROMOTION = "daftar_promotion";
     public static final String TAG_ID_PROMO = "PromoID";
     public static final String TAG_NAMA_PROMO = "PromoName";
     public static final String TAG_LINK_IMAGE_PROMO = "PromoImage";
     public static final String TAG_DESC_PROMO= "PromoDesc";
     public static final String TAG_CATE_PROMO = "PromoCate";
     public static final String TAG_CONT_PROMO = "PromoContact";
     public static final String TAG_DATES_PROMO = "PromoDateStart";
     public static final String TAG_DATEE_PROMO = "PromoDateEnd";

     JSONArray daftar_promotion = null;

     ListView list;

     PromotionListAdapter adapter;

     EditText inputSearch;

     private Curve activity;

     @Override
     public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_curve);
     DaftarPromotion = new ArrayList<HashMap<String, String>>();

      new Activity().execute();
      activity = this;
      list = (ListView) findViewById(R.id.list);

      inputSearch = (EditText) findViewById(R.id.search_box);

      inputSearch.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
                // When user changed the Text
                Curve.this.adapter.getFilter().filter(cs);
            }

            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                    int arg3) {
                // TODO Auto-generated method stub

            }

            @Override
            public void afterTextChanged(Editable arg0) {
                // TODO Auto-generated method stub
            }
        }); 




      list.setOnItemClickListener(new OnItemClickListener() {
      @Override
      public void onItemClick(AdapterView<?> parent, View view,
      int position, long id) {
          HashMap<String, String> map = DaftarPromotion.get(position);
          String pna = map.get(TAG_NAMA_PROMO);
          String pde = map.get(TAG_DESC_PROMO);
          String pca = map.get(TAG_CATE_PROMO);
          String pcon = map.get(TAG_CONT_PROMO);
          String pds = map.get(TAG_DATES_PROMO);
          String pdae = map.get(TAG_DATEE_PROMO);



            Toast.makeText(Curve.this, pna +"\n" + pde +"\n" + pca +"\n" + pds +" to " + pdae +"\n" + pcon,Toast.LENGTH_LONG).show();

      }
      }); 



      }


     public boolean onCreateOptionsMenu(Menu menu) {
            MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.smenu, menu);
            return true;
        }
     public boolean onOptionsItemSelected(MenuItem item) {
         switch (item.getItemId()) {
            case R.id.about:
                 Toast.makeText(Curve.this,"Mobile Advertising Application Using GPS V1.0",Toast.LENGTH_LONG).show();
            return true;
            case R.id.search:{
                 Intent intent = new Intent(Curve.this, Search.class);
                 intent.putExtra("lon",lon);
                 intent.putExtra("lat",lat);
                 startActivity(intent);
            //startActivity(new Intent(this, Search.class));

            }
            return true;
            default:
            return super.onOptionsItemSelected(item);
        }
        }

      public void SetListViewAdapter(ArrayList<HashMap<String, String>> daftar) {
      adapter = new PromotionListAdapter(activity, daftar);
      list.setAdapter(adapter);
      }

      @Override
      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
      if (resultCode == 100) {
      Intent intent = getIntent();
      finish();
      startActivity(intent);
      }
      }

      class Activity extends AsyncTask<String, String, String> {

      @Override
      protected void onPreExecute() {
      super.onPreExecute();
      pDialog = new ProgressDialog(Curve.this);
      pDialog.setMessage("Please Wait...");
      pDialog.setIndeterminate(false);
      pDialog.setCancelable(false);
      pDialog.show();
      }

      protected String doInBackground(String... args) {
      List<NameValuePair> params = new ArrayList<NameValuePair>();
      JSONObject json = jParser.makeHttpRequest(url_daftar_promotion, "GET",params);

      Log.d("All Products: ", json.toString());
      try {
      int success = json.getInt(TAG_SUCCESS);
      if (success == 1) {
           daftar_promotion = json.getJSONArray(TAG_DAFTAR_PROMOTION);
           for (int i = 0; i < daftar_promotion.length();i++){
           JSONObject c = daftar_promotion.getJSONObject(i);
           String PromoID = c.getString(TAG_ID_PROMO);
           String PromoName = c.getString(TAG_NAMA_PROMO);
           String pat = "http://10.0.2.2/webserver_maaug/";
           String PromoImage = pat + c.getString(TAG_LINK_IMAGE_PROMO);
           String PromoDesc = c.getString(TAG_DESC_PROMO);
           String PromoCate = c.getString(TAG_CATE_PROMO);
           String PromoDateStart = c.getString(TAG_DATES_PROMO);
           String PromoDateEnd = c.getString(TAG_DATEE_PROMO);
           String PromoContact = c.getString(TAG_CONT_PROMO);

           HashMap<String, String> map = new HashMap<String, String>();

           map.put(TAG_ID_PROMO, PromoID);
           map.put(TAG_NAMA_PROMO, PromoName);
           map.put(TAG_LINK_IMAGE_PROMO, PromoImage);
           map.put(TAG_DESC_PROMO, PromoDesc);
           map.put(TAG_CATE_PROMO, PromoCate);
           map.put(TAG_DATES_PROMO, PromoDateStart);
           map.put(TAG_DATEE_PROMO, PromoDateEnd);
           map.put(TAG_CONT_PROMO, PromoContact);

           DaftarPromotion.add(map);
           }

           } else {
           }
           } catch (JSONException e) {
           e.printStackTrace();
           }
           return null;
           }

           protected void onPostExecute(String file_url) {
           pDialog.dismiss();
           runOnUiThread(new Runnable() {
           public void run() {

           SetListViewAdapter(DaftarPromotion);




                }
           });
        }
    }
    }

und das ist mein benutzerdefinierter Adapter, es ist ein sehr einfacher, ohne eine eigene Objektklasse

package lbs.promotion;

import java.util.ArrayList;
import java.util.HashMap;

import com.javacodegeeks.android.lbs.Curve;
import com.javacodegeeks.android.lbs.R;

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.ImageView;
import android.widget.TextView;

public class PromotionListAdapter extends BaseAdapter {

 private Activity activity;
 private ArrayList<HashMap<String, String>> data;
 private static LayoutInflater inflater = null;
 public ImageLoader imageLoader;

 public PromotionListAdapter(Activity a, ArrayList<HashMap<String, String>> d) {

 activity = a;
 data = d;
 inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 imageLoader = new ImageLoader(activity.getApplicationContext());
 }

 public int getCount() {
 return data.size();
 }

 public Object getItem(int position) {
 return position;
 }

 public long getItemId(int position) {
 return position;
 }

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

     View vi = convertView;
      if (convertView == null)vi = inflater.inflate(R.layout.item_list_promotion, null);

      TextView PromoID = (TextView) vi.findViewById(R.id.PromoID);
      TextView PromoName = (TextView) vi.findViewById(R.id.PromoName);
      TextView PromoImage = (TextView) vi.findViewById(R.id.PromoImage);
      TextView PromoDesc = (TextView) vi.findViewById(R.id.PromoDesc);
      TextView PromoCate = (TextView) vi.findViewById(R.id.PromoCate);
      TextView PromoContact = (TextView) vi.findViewById(R.id.PromoContact);
      TextView PromoDateStart = (TextView) vi.findViewById(R.id.PromoDateStart);
      TextView PromoDateEnd = (TextView) vi.findViewById(R.id.PromoDateEnd);
      ImageView thumb_image = (ImageView) vi.findViewById(R.id.image_promo);

      HashMap<String, String> daftar_promotion = new HashMap<String, String>();
      daftar_promotion = data.get(position);

      PromoID.setText(daftar_promotion.get(Curve.TAG_ID_PROMO));

      PromoName.setText(daftar_promotion.get(Curve.TAG_NAMA_PROMO));

      PromoImage.setText(daftar_promotion.get(Curve.TAG_LINK_IMAGE_PROMO));

      PromoDesc.setText(daftar_promotion.get(Curve.TAG_DESC_PROMO));

      PromoCate.setText(daftar_promotion.get(Curve.TAG_CATE_PROMO));

      PromoContact.setText(daftar_promotion.get(Curve.TAG_CONT_PROMO));

      PromoDateStart.setText(daftar_promotion.get(Curve.TAG_DATES_PROMO));

      PromoDateEnd.setText(daftar_promotion.get(Curve.TAG_DATEE_PROMO));

      imageLoader.DisplayImage(daftar_promotion.get(Curve.TAG_LINK_IMAGE_PROMO),thumb_image);

      return vi;

      }




}

Hier ist meine layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >

 <!-- Editext for Search -->
    <EditText android:id="@+id/search_box"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="type to search"
        android:inputType="text"
        android:maxLines="1"/>

<ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:divider="#040404"
android:dividerHeight="1dp"
android:listSelector="@drawable/list_selector" />

</LinearLayout>

Wie bekomme ich die Funktion getfilter () zum Laufen? Oder gibt es eine einfachere Möglichkeit, die Filterung in meiner Listenansicht zu implementieren? Ich möchte anhand meines PromoNamens filtern

Antworten auf die Frage(2)

Ihre Antwort auf die Frage