java - Change specific element in RecyclerView -


i'm having bit of trouble android's new recyclerview. want create settings activity each option cardview. inside each cardview there's 2 textviews, title , subtitle. goal when user clicks on specific cardview, want able change cardview's subtitle text. problem when try use following code, doesn't that.

textview subtitle = (textview) findviewbyid(r.id.subtitle); subtitle.settext("blah blah blah"); 

when click on first cardview changes fine. problem when click on second one: changes first 2nd one's text.

i heard assigning each textview custom id when onbindviewholder method called can put

textview subtitle = (textview) findviewbyid(r.*something*.subtitle1); subtitle.settext("blah blah blah"); 

would correct course of action, and, if so, how go doing so?

here's code far:

optionsadapter.java

package com.alexbeschler.reversepolishnotation;  import android.graphics.typeface; import android.support.v7.widget.recyclerview; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.textview;  import java.util.list;  public class optionsadapter extends recyclerview.adapter<optionsadapter.optionsviewholder> {     private list<option> optionlist;     private onitemclicked monitemclicklistener;      public optionsadapter(list<option> optionlist) {         this.optionlist = optionlist;     }      @override     public optionsviewholder oncreateviewholder(viewgroup viewgroup, int i) {         view itemview = layoutinflater.from(viewgroup.getcontext()).inflate(r.layout.options_card_view, viewgroup, false);         return new optionsviewholder(itemview);     }      @override     public void onbindviewholder(optionsviewholder holder, int position) {         option option = optionlist.get(position);         holder.title.settext(option.title);         holder.subtitle.settext(option.subtitle);     }      @override     public int getitemcount() {         return optionlist.size();     }      class optionsviewholder extends recyclerview.viewholder implements view.onclicklistener {         public textview title, subtitle;          public optionsviewholder(view itemview) {             super(itemview);             title = (textview) itemview.findviewbyid(r.id.title);             title.settypeface(null, typeface.bold);             subtitle = (textview) itemview.findviewbyid(r.id.subtitle);             subtitle.settypeface(null, typeface.italic);             itemview.setclickable(true);             itemview.setonclicklistener(this);         }          @override         public void onclick(view v) {             if (monitemclicklistener != null) {                 monitemclicklistener.onitemclick(v, getadapterposition());             }         }     }      public interface onitemclicked {         void onitemclick(view view, int position);     }      public void setonitemclicklistener(onitemclicked monitemclicklistener) {         this.monitemclicklistener = monitemclicklistener;     } } 

optionsactivity.java

package com.alexbeschler.reversepolishnotation;  import android.content.context; import android.content.sharedpreferences; import android.os.bundle; import android.support.v4.app.navutils; import android.support.v7.app.appcompatactivity; import android.support.v7.widget.linearlayoutmanager; import android.support.v7.widget.recyclerview; import android.support.v7.widget.toolbar; import android.view.menuitem; import android.view.view; import android.widget.textview;  import java.util.arraylist; import java.util.list;  public class optionsactivity extends appcompatactivity {     private final string options_file_name = "reversepolishnotation_options";      @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.activity_options);          //instantiate toolbar         toolbar toolbar = (toolbar) findviewbyid(r.id.app_bar);         setsupportactionbar(toolbar);         getsupportactionbar().sethomebuttonenabled(true);         getsupportactionbar().setdisplayhomeasupenabled(true);          //instantiate recyclerview         recyclerview optionslist = (recyclerview) findviewbyid(r.id.cardlist);         optionslist.sethasfixedsize(true);         linearlayoutmanager linearlayoutmanager = new linearlayoutmanager(this);         linearlayoutmanager.setorientation(linearlayoutmanager.vertical);         optionslist.setlayoutmanager(linearlayoutmanager);          final optionsadapter optionsadapter = new optionsadapter(createoptionslist());         optionslist.setadapter(optionsadapter);         optionsadapter.setonitemclicklistener(new optionsadapter.onitemclicked() {             @override             public void onitemclick(view view, int position) {                 optionslistener(position);             }         });     }      @override     public boolean onoptionsitemselected(menuitem item) {         int id = item.getitemid();         if (id == android.r.id.home) {             navutils.navigateupfromsametask(this);         }         return super.onoptionsitemselected(item);     }      private list<option> createoptionslist() {         list<option> list = new arraylist<>();         option option1 = new option();          option option2 = new option();          option1.title = "integer type";         option1.subtitle = "specifies type of integer use - " +                 readstring("key_integer_type", "double");         list.add(option1);          option2.title = "rounding mode";         option2.subtitle = "specifies how round; available in bigdecimal - " +                 readstring("key_rounding_mode", "half up");         list.add(option2);          return list;     }      private void optionslistener(int position) {         switch (position) {             case 0:                 //set first cardview's subtitle text different                 break;             case 1:                 //set second cardview's subtitle text different                 break;             default:         }     }      private string readstring(string optionname, string defaultvalue) {         sharedpreferences sharedpreferences = this.getsharedpreferences(options_file_name,                 context.mode_private);         return sharedpreferences.getstring(optionname, defaultvalue);     }      private void writestring(string optionname, string optionvalue) {         sharedpreferences sharedpreferences = this.getsharedpreferences(options_file_name,                 context.mode_private);         sharedpreferences.editor editor = sharedpreferences.edit();         editor.putstring(optionname, optionvalue);         editor.apply();     } } 

activity_options.xml

<relativelayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="match_parent"     tools:context="com.alexbeschler.reversepolishnotation.optionsactivity">      <include         android:id="@+id/app_bar"         layout="@layout/app_bar" />      <android.support.v7.widget.recyclerview         android:id="@+id/cardlist"         android:layout_below="@+id/app_bar"         android:layout_width="match_parent"         android:layout_height="match_parent"/>  </relativelayout> 

options_card_view.xml

<?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.cardview xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:card_view="http://schemas.android.com/apk/res-auto"     android:id="@+id/card_view"     android:layout_width="match_parent"     android:layout_height="wrap_content"     android:layout_below="@+id/app_bar"     android:layout_marginleft="@dimen/padding15dp"     android:layout_marginright="@dimen/padding15dp"     android:layout_margintop="@dimen/padding15dp"     android:clickable="true"     android:foreground="?android:attr/selectableitembackground"     card_view:cardcornerradius="2dp">      <linearlayout         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:orientation="vertical"         android:padding="@dimen/padding10dp">          <textview             android:id="@+id/title"             android:layout_width="match_parent"             android:layout_height="wrap_content"             android:text="@string/hello_world"             android:textsize="17sp" />          <textview             android:id="@+id/subtitle"             android:layout_width="match_parent"             android:layout_height="wrap_content"             android:text="@string/hello_world"             android:textsize="14sp" />      </linearlayout> </android.support.v7.widget.cardview> 


Comments

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -