搜索功能的列表视图 [英] Search Functionality for Listview

查看:152
本文介绍了搜索功能的列表视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是新来的机器人。我只是试图让我的应用程序的一个简单的搜索功能。我的应用程序包含一个的ListView 一个的EditText 和一个按钮的搜索。我的的ListView 内容从数据库中使用自定义适配器,它是扩展了上市 BaseAdapter

i'm new to android. I'm just trying to make one simple search functionality for my app. My app consists one ListView one EditText and one Button for search. My ListView contents are listed from database using custom adapter which is extends BaseAdapter

现在,我想要做的是,我想从的ListView搜索任何记录举例来说,如果我有一些记录像

Now, what i'm trying to do is, i want to search any records from ListView For example, if i've some records like

优化,运营,数据挖掘,计算机伦理学,计算机系统结构等...

Optimization, Operations, Data Mining, Computer Ethics, Computer Architecture and etc...

所以,当我键入如运一些唱片的名字

在ListView应列出这是从运算开始记录... 我已经提到一些这一点,从我得到<一href="http://developer.android.com/reference/android/widget/TextView.html#addTextChangedListener%28android.text.TextWatcher%29"相对=nofollow> addTextChangedListener 但是,我不知道如何做到这一点?

The listview should listed the records which is started from op... I've referred something for this, from i got addTextChangedListener But, i don't know how to do this?

和,我们可以做到这一点相同的功能,点击的按钮

And, Can we do this same functionality with click of button

一直有这个任何想法的人?先谢谢了。

Has anyone having any idea on this? Thanks in advance.

推荐答案

我曾问过类似有点质疑而回。在这里:过滤一个ListView与Baseadapter过滤文字不是图片。虽然,我的具体问题涉及一个GridView的概念(和code)可以取代一个ListView。

I had asked a similar kinda question a while back. Here: Filtering a ListView with Baseadapter filters text not images. Although, my specific question concerned a GridView, the concept (and the code) can be substituted for a ListView.

请注意:这将是一个漫长的职位,但我觉得有必要为了完整起见(我离开了进口虽然)

NOTE: This will be a lengthy post but I think necessary for the sake of completeness (I am leaving out the imports though)

主要活动( Friends.java 的)

public class Friends extends SherlockActivity {

    // BUNDLE OBJECT TO GET DATA FROM EARLIER ACTIVITY
    Bundle extras;

    // INITIAL ALBUM ID AND NAME
    String initialUserID;

    // THE GRIDVIEW
    GridView gridOfFriends;

    // THE ADAPTER
    FriendsAdapter adapter;

    // ARRAYLIST TO HOLD DATA
    ArrayList<getFriends> arrFriends;

    // LINEARLAYOUT TO SHOW THE FOOTER PROGRESS BAR
    LinearLayout linlaProgressBar;

    // THE EDITTEXT TO FILTER USERS
    EditText filterText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.friends_grid_list);

        extras = getIntent().getExtras();

        if (extras.containsKey("USER_ID"))  {
            initialUserID = extras.getString("USER_ID");
        } else {
            Toast.makeText(
                    getApplicationContext(), 
                    "There was a problem getting your Friends Data. Please hit the back button and try again.", 
                    Toast.LENGTH_SHORT).show();
        }

        ActionBar actionBar = getSupportActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setDisplayShowHomeEnabled(true);
        actionBar.setDisplayShowTitleEnabled(true);
        actionBar.setTitle("Your Friends");

        // CAST THE GRIDVIEW
        gridOfFriends = (GridView) findViewById(R.id.gridFriends);

        // INSTANTIATE THE ARRAYLIST
        arrFriends = new ArrayList<getFriends>();

        // CAST THE ADAPTER
        adapter = new FriendsAdapter(Friends.this, arrFriends);

        // CAST THE LINEARLAYOUT THAT HOLDS THE PROGRESS BAR
        linlaProgressBar = (LinearLayout) findViewById(R.id.linlaProgressBar);
        linlaProgressBar.setVisibility(View.GONE);

        // GET THE LOGGED IN USERS FRIENDS DATA
        if (initialUserID != null)  {
            new getFriendsData().execute();
        } else {
            Toast.makeText(
                    getApplicationContext(), 
                    "There was a problem getting your Friends Data. Please hit the back button and try again.", 
                    Toast.LENGTH_SHORT).show();
        }

        // CAST THE EDITTEXT AND SETUP FILTERING
        filterText = (EditText) findViewById(R.id.editFilterList);
        filterText.addTextChangedListener(filterTextWatcher);
    }

    private class getFriendsData extends AsyncTask<Void, Void, Void>    {

        @Override
        protected void onPreExecute() {

            // SHOW THE BOTTOM PROGRESS BAR (SPINNER) WHILE LOADING THE FRIENDS LIST
            linlaProgressBar.setVisibility(View.VISIBLE);
        }

        @Override
        protected Void doInBackground(Void... params) {

            try {
                String query = 
                        "SELECT name, uid, pic_big " +
                        "FROM user " +
                        "WHERE uid in " +
                        "(SELECT uid2 FROM friend WHERE uid1=me()) " +
                        "order by name";
                Bundle paramGetFriendsList = new Bundle();
                paramGetFriendsList.putString("method", "fql.query");
                paramGetFriendsList.putString("query", query);

                String resultFriendsList = Utility.mFacebook.request(paramGetFriendsList);

                JSONArray JAFriends = new JSONArray(resultFriendsList);

                getFriends friends;

                if (JAFriends.length() == 0)    {

                } else {
                    for (int i = 0; i < JAFriends.length(); i++) {
                        JSONObject JOFriends = JAFriends.getJSONObject(i);

                        friends = new getFriends();

                        // SET FRIENDS ID
                        if (JOFriends.has("uid"))   {
                            friends.setFriendID(JOFriends.getString("uid"));
                        } else {
                            friends.setFriendID(null);
                        }

                        // SET FRIENDS NAME
                        if (JOFriends.has("name"))  {
                            friends.setFriendName(JOFriends.getString("name"));
                        } else {
                            friends.setFriendName(null);
                        }

                        // SET FRIENDS PROFILE PICTURE
                        if (JOFriends.has("pic_big"))   {
                            friends.setFriendProfile(JOFriends.getString("pic_big"));
                        } else {
                            friends.setFriendProfile(null);
                        }

                        arrFriends.add(friends);

                    }
                }

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

            return null;
        }

        @Override
        protected void onPostExecute(Void result) {

            // SET THE ADAPTER TO THE GRIDVIEW
            gridOfFriends.setAdapter(adapter);

            // HIDE THE BOTTOM PROGRESS BAR (SPINNER) AFTER LOADING THE FRIENDS LIST
            linlaProgressBar.setVisibility(View.GONE);
        }

    }

    private TextWatcher filterTextWatcher = new TextWatcher() {

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

            adapter.getFilter().filter(s.toString().toLowerCase());
            adapter.notifyDataSetChanged();
        }

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

        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    };
}

getFriends.java 的类的的ArrayList

public class getFriends {

    String friendID;
    String friendName;
    String friendProfile;

    // SET FRIENDS ID
    public void setFriendID(String friendID) {
        this.friendID = friendID;
    }

    // GET FRIENDS ID
    public String getFriendID() {
        return friendID;
    }

    // SET FRIENDS NAME
    public void setFriendName(String friendName) {
        this.friendName = friendName;
    }

    // GET FRIENDS NAME
    public String getFriendName() {
        return friendName;
    }

    // SET FRIENDS PROFILE
    public void setFriendProfile(String friendProfile) {
        this.friendProfile = friendProfile;
    }

    // GET FRIENDS PROFILE
    public String getFriendProfile() {
        return friendProfile;
    }
}

最后,适配器类( FriendsAdapter.java 的)

public class FriendsAdapter extends BaseAdapter implements Filterable {

    ProgressDialog dialog;

    Activity activity;

    LayoutInflater inflater = null;
    ImageLoader imageLoader;

    ArrayList<getFriends> arrayFriends;
    List<getFriends> mOriginalNames;

    FriendsAdapter(Activity a, ArrayList<getFriends> arrFriends) {

        activity = a;

        arrayFriends = arrFriends;

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

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

    public Object getItem(int position) {
        return arrayFriends.get(position);
    }

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

    @Override
    public void notifyDataSetChanged() {
        super.notifyDataSetChanged();
    }

    public View getView(final int position, View convertView, ViewGroup parent) {
        View vi = convertView;
        if (convertView == null)
            vi = inflater.inflate(R.layout.friends_grid_items, null);

        ImageView imgProfilePicture = (ImageView) vi.findViewById(R.id.imgProfilePicture);
        TextView txtUserName = (TextView) vi.findViewById(R.id.txtUserName);
        FrameLayout mainContainer = (FrameLayout) vi.findViewById(R.id.mainContainer);


        txtUserName.setText(arrayFriends.get(position).getFriendName());

        if (arrayFriends.get(position).getFriendProfile() != null) {
            imageLoader.DisplayImage(arrayFriends.get(position).getFriendProfile(),imgProfilePicture);
        } else if (arrayFriends.get(position).getFriendProfile() == null) {
            imgProfilePicture.setVisibility(View.GONE);
        }

        mainContainer.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent showFriendsProfile = new Intent(activity.getApplicationContext(), UserProfileNew.class);
                showFriendsProfile.putExtra("USER_ID", arrayFriends.get(position).getFriendID());
                showFriendsProfile.putExtra("NAME", arrayFriends.get(position).getFriendName());
                activity.startActivity(showFriendsProfile);
            }
        });

        return vi;
    }

    @Override
    public Filter getFilter() {

        Filter filter = new Filter() {

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

                arrayFriends = (ArrayList<getFriends>) results.values;
                notifyDataSetChanged();
            }

            @Override
            protected FilterResults performFiltering(CharSequence constraint) {

                FilterResults results = new FilterResults();
                ArrayList<getFriends> FilteredArrayNames = new ArrayList<getFriends>();

                if (mOriginalNames == null) {
                    mOriginalNames = new ArrayList<getFriends>(arrayFriends);
                }
                if (constraint == null || constraint.length() == 0) {
                    results.count = mOriginalNames.size();
                    results.values = mOriginalNames;
                } else {
                    constraint = constraint.toString().toLowerCase();
                    for (int i = 0; i < mOriginalNames.size(); i++) {
                        getFriends dataNames = mOriginalNames.get(i);
                        if (dataNames.getFriendName().toLowerCase()
                                .contains(constraint.toString())) {
                            FilteredArrayNames.add(dataNames);
                        }
                    }

                    results.count = FilteredArrayNames.size();
                    // System.out.println(results.count);

                    results.values = FilteredArrayNames;
                    // Log.e("VALUES", results.values.toString());
                }

                return results;
            }
        };

        return filter;
    }
}

您可以使用这里的概念和替代你的ListView。我用这个其他地方的ListView和工作,因为它应该。不幸的是,我不能给那个code走在公共论坛。希望这可以帮助你,尽管。此外,一个非常漫长的职位毫无疑问的,而且是必要的,我相信。

You can use the concept here and substitute for your ListView. I have used this elsewhere for a ListView and works as it should. Unfortunately, I cannot give that code away on a public fora. Hope this helps you though. Again, a very lengthy post no doubt, but necessary I believe.

这篇关于搜索功能的列表视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆