1

我正在尝试在使用自定义适配器的 ListView 上实现搜索功能。我正在关注这个例子:http: //justcallmebrian.com/ ?p=149 。我能够编辑代码并将其放入我的适配器中。但是,它并没有带来任何结果。你能看看我的代码,让我知道我错过了什么或者我还能做些什么吗?

这是列表视图:

public class DataView extends Activity implements OnItemClickListener {

private static final String rssFeed = "http://leobee.com/android/push/login/schedule.php";
private static final String AddEvent = "http://leobee.com/android/push/login/deleteUpdate.php";

private static final String ARRAY_NAME = "events";
private static final String EVENT_NAME = "event_name";
private static final String EVENT_ID = "event_id";
private static final String EVENT_DATE = "event_date";
private static final String EVENT_START = "event_start";
private static final String EVENT_END = "event_end";
private static final String EVENT_LOCATION = "event_location";
private static final String EVENT_DELETE_FLAG = "event_delete_flag";

List<Item> arrayOfList;
List<String> sortOfList;
  SimpleAdapter simpleadapter;

ListView listView;
NewsRowAdapter objAdapter;
List<Integer> deleteList;
String undelete;
String eventNameDeleted;
String eventIdDeleted;
String eventDateDeleted;
String eventStartDeleted;
String eventEndDeleted;
String eventLocationDeleted;
JSONObject json;
String addBack = "0";
Button btnMessage;
Button btnLogout;
UserFunctions userFunctions;
EditText searchBox;
int textlength = 0;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.schedulelistview);

    userFunctions = new UserFunctions();
    if (userFunctions.isUserLoggedIn(getApplicationContext())) {

        listView = (ListView) findViewById(R.id.listview);
        listView.isTextFilterEnabled();
        listView.setOnItemClickListener(this);
        deleteList = new ArrayList<Integer>();      
        btnLogout = (Button) findViewById(R.id.btnLogout);
        btnMessage = (Button) findViewById(R.id.btnMessage);
        searchBox = (EditText) findViewById(R.id.EditText01);




        arrayOfList = new ArrayList<Item>();

        if (Utils.isNetworkAvailable(DataView.this)) {
            new MyTask().execute(rssFeed);
        } else {
            showToast("No Network Connection. Application is unable to load data.");
        }

    } else {



    }



}



class MyTask extends AsyncTask<String, Void, String> {

    ProgressDialog pDialog;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

        pDialog = new ProgressDialog(DataView.this);
        pDialog.setMessage("Loading...");
        pDialog.setCancelable(false);
        pDialog.show();
    }

    @Override
    protected String doInBackground(String... params) {
        return Utils.getJSONString(params[0]);
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);


            try {
                JSONObject mainJson = new JSONObject(result);
                JSONArray jsonArray = mainJson.getJSONArray(ARRAY_NAME);
                for (int i = 0; i < jsonArray.length(); i++) {
                    JSONObject objJson = jsonArray.getJSONObject(i);

                    Item objItem = new Item();

                    // here objItem is reciveing and processing data from
                    // JSON string text
                    objItem.setId(objJson.getInt(EVENT_ID));// names from
                    objItem.setName(objJson.getString(EVENT_NAME));
                    objItem.setDate(objJson.getString(EVENT_DATE));
                    objItem.setDeleteFlag(objJson.getInt(EVENT_DELETE_FLAG));

                    arrayOfList.add(objItem);

                }
            } catch (JSONException e) {
                e.printStackTrace();
            }

            for (int i = 0; i < arrayOfList.size(); i++) {

                Item deletflagCheck = arrayOfList.get(i);

                if (deletflagCheck.getDeleteFlag() == 1) {

                    deleteList.add(deletflagCheck.getId());
                } else {

                }

            }

        }
        setAdapterToListview();

    }
}

@Override
public void onItemClick(AdapterView<?> parent, View viewDel, int position,
        long id) {

    Item deletflagCheck = arrayOfList.get(position);

    if (deletflagCheck.getDeleteFlag() == 1) {

        showDeleteDialog(position);

    } else {

        Intent intent = new Intent(DataView.this.getApplicationContext(),
                UpdateServer.class);

        for (int i = 0; i < 1; i++) {
            Item item = arrayOfList.get(position);
            intent.putExtra("id", item.getId());
            intent.putExtra("name", item.getName());
            intent.putExtra("date", item.getDate());
            intent.putExtra("startTime", item.getStartTime());
            intent.putExtra("endTime", item.getEndTime());
            intent.putExtra("location", item.getLocation());
            intent.putExtra("deleteFlag", item.getDeleteFlag());

        }
        startActivity(intent);
    }

}


public void setAdapterToListview() {

    objAdapter = new NewsRowAdapter(DataView.this,
            R.layout.schedulelistrow, arrayOfList, deleteList);
    objAdapter.notifyDataSetChanged();
    listView.setAdapter(objAdapter);



    searchBox.addTextChangedListener(new TextWatcher(){

            @Override
            public void afterTextChanged(Editable arg0) {
                // Do nothing
            }

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

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                objAdapter.getFilter().filter(s);
            }

        });






}

public void showToast(String msg) {
    Toast.makeText(DataView.this, msg, Toast.LENGTH_LONG).show();
}



}

物品类别:

public class Item {
    private int id;
    private String name;
    private String date;
    private String startTime;
    private String endTime;
    private String location;
    private int deleteFlag;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getStartTime() {
        return startTime;
    }

    public void setStartTime(String startTime) {
        this.startTime = startTime;
    }

    public String getEndTime() {
        return endTime;
    }

    public void setEndTime(String endTime) {
        this.endTime = endTime;
    }

    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
    }

    public int getDeleteFlag() {
        return deleteFlag;
    }

    public void setDeleteFlag(int deleteFlag) {
        this.deleteFlag = deleteFlag;
    }
}

适配器:

public class NewsRowAdapter extends ArrayAdapter<Item> {

    private Activity activity;
    private List<Item> items;
    private Item objBean;
    private int row;
    private List<Integer> disable;
    View view ;
    int disableView;
    ListFilter  filter ;
    List<Item> filteredItems;

    public NewsRowAdapter(Activity act, int resource, List<Item> arrayList, List<Integer> disableList) {
        super(act, resource, arrayList);
        this.activity = act;
        this.row = resource;
        this.items = arrayList;
         filteredItems = items;
        this.disable=disableList;

    }

    public int getCount() {
        return items.size();        
    }
    public Item getItem(int position) {
        return items.get(position);
    }
    public long getItemId(int position) {
        return position;
    }


        @Override
        public int getItemViewType(int position) {

        for(int k =0;k < disable.size();k++){
            if(position==disable.get(k)){

                disableView=disable.get(k);
                System.out.println("disagle view at" +disableView);

            } 

        }


    return position;
}

            @Override
            public View getView(final int position, View convertView, ViewGroup parent) {
                View view = convertView;
                ViewHolder holder;

                if (view == null) {
                    LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    view = inflater.inflate(row, null);

                    getItemViewType(position);

                    if(position==disableView){ 
                        view.setBackgroundColor(Color.YELLOW);

                        }else{
                            view.setBackgroundColor(Color.WHITE);

                        }


                    //ViewHolder is a custom class that gets TextViews by name: tvName, tvCity, tvBDate, tvGender, tvAge;
                    holder = new ViewHolder();

                    /* setTag Sets the tag associated with this view. A tag can be used to
                     *  mark a view in its hierarchy and does not have to be unique 
                     *  within the hierarchy. Tags can also be used to store data within
                     *   a view without resorting to another data structure.

        */
                    view.setTag(holder);
                } else {

                    getItemViewType(position);

                    if(position==disableView){ 
                        view.setBackgroundColor(Color.YELLOW);


                        }else{
                            view.setBackgroundColor(Color.WHITE);

                        }

                    //the Object stored in this view as a tag
                    holder = (ViewHolder) view.getTag();
                }

                if ((items == null) || ((position + 1) > items.size()))
                    return view;

                objBean = items.get(position);


        holder.tv_event_name = (TextView) view.findViewById(R.id.tv_event_name);
        holder.tv_event_date = (TextView) view.findViewById(R.id.tv_event_date);
        holder.tv_event_start = (TextView) view.findViewById(R.id.tv_event_start);
        holder.tv_event_end = (TextView) view.findViewById(R.id.tv_event_end);
        holder.tv_event_location = (TextView) view.findViewById(R.id.tv_event_location);


        if (holder.tv_event_name != null && null != objBean.getName()
                && objBean.getName().trim().length() > 0) {
            holder.tv_event_name.setText(Html.fromHtml(objBean.getName()));

        }
        if (holder.tv_event_date != null && null != objBean.getDate()
                && objBean.getDate().trim().length() > 0) {
            holder.tv_event_date.setText(Html.fromHtml(objBean.getDate()));
        }
        if (holder.tv_event_start != null && null != objBean.getStartTime()
                && objBean.getStartTime().trim().length() > 0) {
            holder.tv_event_start.setText(Html.fromHtml(objBean.getStartTime()));
        }
        if (holder.tv_event_end != null && null != objBean.getEndTime()
                && objBean.getEndTime().trim().length() > 0) {
            holder.tv_event_end.setText(Html.fromHtml(objBean.getEndTime()));
        }
        if (holder.tv_event_location != null && null != objBean.getLocation ()
                && objBean.getLocation ().trim().length() > 0) {
            holder.tv_event_location.setText(Html.fromHtml(objBean.getLocation ()));

        }


        return view;
    }

    public class ViewHolder {
        public TextView 
        tv_event_name,
        tv_event_date,
        tv_event_start,
        tv_event_end,
        tv_event_location
        /*tv_event_delete_flag*/;


    }

    private class ListFilter extends Filter{

        List<Item> filt;
        List<Item> tmpItems;


        protected FilterResults performFiltering(CharSequence constraint) {
            FilterResults retval = new FilterResults();
            List<Item> filt;
            List<Item> tmpItems;
            retval.values = items;
                        retval.count = items.size();
            if(constraint != null && constraint.toString().length() > 0) {
                constraint = constraint.toString().toUpperCase();
                                 filt = new ArrayList<Item>();
                                 tmpItems = new ArrayList<Item>();
                                tmpItems.addAll(items);
                                for(int i = 0; i > tmpItems.size(); i++) {
                                    Item sf = tmpItems.get(i);
                                    if(sf.getName().toUpperCase().contains(constraint)) {
                                        filt.add(sf);
                                    }
                                }
                               retval.count = filt.size();
                               retval.values = filt;
                           }
                      return retval;
            }

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


            filteredItems = (ArrayList)results.values;
            notifyDataSetChanged();
            clear();

            for (int i = 0; i> filteredItems.size(); i++){
                add(filteredItems.get(i));
            }
            notifyDataSetInvalidated();

        }       

    }

    @Override
    public Filter getFilter() {
        if (filter == null){
            filter = new ListFilter();
        }
        return filter;
    }

}

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="fill_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/layoutButtons"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:padding="5dp" >

        <Button
            android:id="@+id/btnLogout"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight=".30"
            android:text="Logout" />

        <Button
            android:id="@+id/btnMessage"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight=".70"
            android:text="Send Message To All" />
    </LinearLayout>



    <EditText
        android:id="@+id/EditText01"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="Search" >
    </EditText>

    <ListView
        android:id="@+id/listview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

</LinearLayout>
4

0 回答 0