vendredi 22 avril 2016

Recyclerview filter issue

I have implemented recyclerview filtering from sqlite nd everything working fine except when i click on button of custom recyclerview. Upon clicking always getting zeroth position. how to solve this issue? Thanks.

Here's the code

SearchAdapter.java

public class SearchAdapter extends
    RecyclerView.Adapter<SearchAdapter.ViewHolder> implements Filterable {
private Activity activity;
private LayoutInflater inflater;
private ArrayList<CartItem> feedItems;
ImageView plus;
ImageView minus;
String result;
String formattedDate;
int id;
private TextView prices;
private View.OnClickListener onAddNum;
private View.OnClickListener onSubNum;
private ItemFilter mFilter = new ItemFilter();
public SearchAdapter(Activity activity, ArrayList<CartItem> feedItems) {
    this.activity = activity;
    this.feedItems = feedItems;

    inflater = (LayoutInflater) activity
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

public void setOnAddNum(View.OnClickListener onAddNum) {
    this.onAddNum = onAddNum;
}

public void setOnSubNum(View.OnClickListener onSubNum) {
    this.onSubNum = onSubNum;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(
            R.layout.feed_item, parent, false);
    prices = (TextView) v.findViewById(R.id.timestamp2);
    ViewHolder viewHolder = new ViewHolder(v);
    return viewHolder;
}

@Override
public void onBindViewHolder(final ViewHolder holder, int position) {

    CartItem item = (CartItem) feedItems.get(position);
    holder.price.setText((String.valueOf(item.getProductName()) + ""));
    holder.location.setText((String.valueOf(item.getQuantity())) + "");
    holder.plus.setTag(position);
    holder.plus.setFocusable(true);
    holder.plus.setClickable(true);
    holder.plus.setOnClickListener(onAddNum);
    holder.minus.setTag(position);
    holder.minus.setOnClickListener(onSubNum);

}

@Override
public int getItemCount() {
    return feedItems.size();
}

public long getItemId(int position) {
    return position;

}

class ViewHolder extends RecyclerView.ViewHolder {

    ImageView plus;
    ImageView minus;
    TextView date;
    TextView price;
    TextView assignTo;
    TextView location;

    public ViewHolder(View vi) {
        super(vi);

        date = (TextView) vi.findViewById(R.id.name);
        price = (TextView) vi.findViewById(R.id.price);
        assignTo = (TextView) vi.findViewById(R.id.timestamp);

        location = (TextView) vi.findViewById(R.id.timestamp2);
        plus = (ImageView) vi.findViewById(R.id.btnAddToCart1);

        minus = (ImageView) vi.findViewById(R.id.btnAddToCart5);

    }
}
public Filter getFilter() {
    return mFilter;
}
public void update(int position) {
    // TODO Auto-generated method stub
    prices.setText(String.valueOf(position));
    notifyDataSetChanged();

}

private class ItemFilter extends Filter {
    @Override
    protected FilterResults performFiltering(CharSequence constraint) {

        String filterString = constraint.toString().toLowerCase(
                Locale.getDefault());

        FilterResults results = new FilterResults();

        // final List<FeedItem> list = feedItems;

        int count = feedItems.size();
        final ArrayList<CartItem> nlist = new ArrayList<CartItem>();

        String filterableString;

        for (int i = 0; i < count; i++) {

            CartItem mTvObject = feedItems.get(i);
            filterableString = mTvObject.getProductName() + ""
                    + mTvObject.getQuantity();

            if (filterableString.toLowerCase(Locale.getDefault()).contains(
                    filterString)) {
                nlist.add(mTvObject);
            }
        }

        results.values = nlist;
        results.count = nlist.size();

        return results;
    }

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

        feedItems = (ArrayList<CartItem>) results.values;
        notifyDataSetChanged();
    }

}

MainActivity.java class

public class ActivitySearch extends BaseDrawerActivity implements View.OnClickListener

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_search);
mToolbar = (Toolbar) findViewById(R.id.toolbar);

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

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        mSearchAction = menu.findItem(R.id.action_search);
        ActionBar action = getSupportActionBar(); 
        action.setDisplayShowCustomEnabled(true); //enable it to display a
        // custom view in the action bar.
        action.setCustomView(R.layout.search_bar);//add the custom view
        action.setDisplayShowTitleEnabled(false); //hide the title

        edtSeach = (EditText)action.getCustomView().findViewById(R.id.edtSearch); //the text editor

        //this is a listener to do a search when the user clicks on search button
        edtSeach.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                if (actionId == EditorInfo.IME_ACTION_SEARCH) {

                    return true;
                }
                return false;
            }

        });




        edtSeach.requestFocus();

        //open the keyboard focused in the edtSearch
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(edtSeach, InputMethodManager.SHOW_IMPLICIT);


        edtSeach.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before,
                    int count) {
                System.out.println("Text [" + s + "]");
                if(s.length()>=3){
                    recyclerView.setVisibility(View.VISIBLE);
                listAdapter.getFilter().filter(s.toString());
                }

                else{
                    recyclerView.setVisibility(View.INVISIBLE);
                }
            }

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

            }

            @Override
            public void afterTextChanged(Editable s) {
            }
        });





        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
             mSearchAction.setIcon(getResources().getDrawable(R.drawable.cancel_search,getApplicationContext().getTheme()));
          } else {
              mSearchAction.setIcon(getResources().getDrawable(R.drawable.cancel_search));
       }
        return super.onPrepareOptionsMenu(menu);
    }

  @Override
    public void onClick(View view) {
        Object tag = (Integer) view.getTag();
        switch (view.getId()) {
        case R.id.btnAddToCart1:


            if (tag != null && tag instanceof Integer) {

                int position = (Integer) tag;


                CartItem feedItems = new CartItem();

                feedItems = mHelper.getProduct(++position);

                String qtyz = feedItems.getQuantity();
                String pname = feedItems.getProductName();
                int num = Integer.parseInt(pname);
                num++;
                int id = feedItems.getId();
                dataBase = mHelper.getWritableDatabase();
                ContentValues cv = new ContentValues();
                cv.put(DBHelper.KEY_COUNT, String.valueOf(num));

                System.out.println("Database values : " + cv);
                dataBase.update(DBHelper.TABLE_NAME, cv, DBHelper.KEY_ID
                        + " = '" +id + "'", null);
                ArrayList<CartItem> item = mHelper.getAllProducts();
                listAdapter = new SearchAdapter(this, item);
                listAdapter.setOnSubNum(this);
                listAdapter.setOnAddNum(this);
                recyclerView.setAdapter(listAdapter);


            }
            break;

Aucun commentaire:

Enregistrer un commentaire