Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

Android

search view in ribbit app

i want to add a search view in my ribbit app....in edit friends activity...how do i do this....i have added the searchview with the steps in the android developer site....but how do i implement the parse stuff.

1 Answer

this is my code

\\package com.amebo.inhit;

import java.util.List; import android.app.AlertDialog; import android.app.ListActivity; import android.app.SearchManager; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.Window; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.SearchView; import com.parse.FindCallback; import com.parse.ParseException; import com.parse.ParseQuery; import com.parse.ParseRelation; import com.parse.ParseUser; import com.parse.SaveCallback;

public class EditFriendsActivity extends ListActivity {

public static final String TAG = EditFriendsActivity.class.getSimpleName();

protected List<ParseUser> mUsers;
protected ParseRelation<ParseUser> mFriendsRelation;
protected ParseUser mCurrentUser;
protected SearchView search;

@Override
protected void onCreate(Bundle savedInstanceState) {
       handleIntent(getIntent());
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
    setContentView(R.layout.activity_edit_friends);

    getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
}

 @Override
    protected void onNewIntent(Intent intent) {
        handleIntent(intent);
    }

    private void handleIntent(Intent intent) {

        if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
            String query = intent.getStringExtra(SearchManager.QUERY);
            //use the query to search your data somehow
        }
    }


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

    mCurrentUser = ParseUser.getCurrentUser();
    mFriendsRelation = mCurrentUser.getRelation(ParseConstants.KEY_FRIENDS_RELATION);

    setProgressBarIndeterminateVisibility(true);

    ParseQuery<ParseUser> query = ParseUser.getQuery();
    query.orderByAscending(ParseConstants.KEY_USERNAME);
    query.setLimit(1000);
    query.findInBackground(new FindCallback<ParseUser>() {

        @Override
        public void done(List<ParseUser> users, ParseException e) {
            setProgressBarIndeterminateVisibility(false);
            if (e == null) {
                //sucess
                mUsers = users;
                String[] usernames = new String[mUsers.size()];
                int i = 0;
                for(ParseUser user : mUsers) {
                    usernames[i] = user.getUsername();
                    i++;
                }
                ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                        EditFriendsActivity.this, 
                        android.R.layout.simple_list_item_checked, 
                        usernames);
                setListAdapter(adapter);

                addFriendCheckmarks();
            }
            else {
                Log.e(TAG, e.getMessage());
                AlertDialog.Builder builder= new AlertDialog.Builder(EditFriendsActivity.this);
                builder.setMessage(e.getMessage())
                .setTitle(R.string.error_tittle)
                .setPositiveButton(android.R.string.ok,null);
            AlertDialog dialog = builder.create();
            dialog.show();
            }
        }
    });
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.edit_friends, menu);

    SearchManager searchManager =
               (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView =
                (SearchView) menu.findItem(R.id.search).getActionView();
        searchView.setSearchableInfo(
                searchManager.getSearchableInfo(getComponentName()));

    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int itemId = item.getItemId();
    switch(itemId) {
    case  R.id.search: 
        break;  

    }
    return super.onOptionsItemSelected(item);
}

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);

    if(getListView().isItemChecked(position)){
        //add friend
        mFriendsRelation.add(mUsers.get(position));

    }
    else{
        //remove friend
        mFriendsRelation.remove(mUsers.get(position));
    }
    mCurrentUser.saveInBackground(new SaveCallback() {

        @Override
        public void done(ParseException e) {
            if(e != null) {
                Log.e(TAG, e.getMessage());
            }
        }
    });
}
private void addFriendCheckmarks() {
    mFriendsRelation.getQuery().findInBackground(new FindCallback<ParseUser>() {

        @Override
        public void done(List<ParseUser> friends, ParseException e) {
            if (e == null){
                //list returned- look for a match
                for(int i =0; i < mUsers.size(); i++){
                    ParseUser user = mUsers.get(i);

                    for(ParseUser friend : friends) {
                        if (friend.getObjectId().equals(user.getObjectId())) {
                            getListView().setItemChecked(i, true);
                        }
                    }
                }
            }
            else {
                Log.e(TAG, e.getMessage());
            }
        }

    });
    }

} \\