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
Post a Comment