将更改变量传递给RecyclerView Adapter

时间:2017-06-27 14:24:48

标签: java android android-recyclerview recycler-adapter

我有一个自定义RecyclerView.Adapter,用于呈现列表的布局。在父Activity中,我有两个可以从UI更改的变量。这些参数用于呈现RecyclerView项的一部分。

我知道我可以通过Adapter构造函数传递一些数据,但这是一次性的事情。如何将数据传递到适配器并动态更改?

5 个答案:

答案 0 :(得分:1)

使您的适配器实现自定义接口,定义传递/获取数据的方法。

答案 1 :(得分:1)

您始终可以将所需的任何公共方法添加到适配器并直接调用它们。您可以在Activity中保存对适配器的引用,也可以投放recyclerView.getAdapter()的结果:

mAdapter = new YourAdapter();
mRecyclerView.setAdapter(mAdapter);
...
mAdapter.yourCustomMethod(data);

YourAdapter adapter = (YourAdapter) recyclerView.getAdapter();
...
adapter.yourCustomMethod(data);

答案 2 :(得分:0)

当您使用RecyclerView.Adapter的notifyDataSetChanged()方法(如here in the docs所述)立即通过您的UI更新RecyclerView中的数据时。

答案 3 :(得分:0)

最佳方法

使用const mapStateToProps = state => { return { email: state.auth.email }; }; const mapDispatchToProps = dispatch => { // this put a function emailChanged into your props that will dispatch the correct action emailChanged: text => dispatch(emailChanged(text)) }; const LoginFormContainer = connect(mapStateToProps, mapDispatchToProps)(LoginForm); export default LoginFormContainer; 。使用 public static byte[] EncryptAES(byte[] message, byte[] key, bool doEncryption) { try { Aes aes = new AesManaged(); aes.Key = key; aes.IV = new byte[16]; aes.Mode = CipherMode.CBC; aes.Padding = PaddingMode.None; ICryptoTransform cipher; if (doEncryption == true) cipher = aes.CreateEncryptor(); else cipher = aes.CreateDecryptor(); return cipher.TransformFinalBlock(message, 0, message.Length); } catch(Exception) { return null; } } ,您可以将班级中的字段标记为DataBinding,然后调用DataBinding来更新该属性的diplaying。 这是一个小教程:

@Bindable

并在你的布局中

notifyPropertyChanged(BR.field_name)

通过这种方式,您只需浏览class Test extends BaseObservable{ @Bindable String testString; ... public void setTestString(String newStr){ this.testString = newStr; notifyPropertyChanged(BR.testString); } ... } <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="test" type="com.yout.package.name.Test"/> </data> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{test.testString}"/> </FrameLayout> </layout> 个对象,然后致电List更新所有观看次数(只会更新相关的Test)。 Here是如何开始使用DataBinding的指南

体面的方法

setTestString中,您拥有方法TextView。只需调用此方法并将更新作为RecyclerView.Adapter参数传递。然后有一个notifyItemChanged(int position, Object payload),您可以在其中更新您的观看次数。

答案 4 :(得分:0)

在适配器内部,您可以添加如下方法:

public void setPropX(yourType propxVal){
    mPropX = propXVal; //Set the value of you property
    notifyDataSetChanged(); //Redraw all the elements
}

在您的活动存储中,适配器的全局引用然后在需要时调用上面的函数