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