我有一个自定义RecyclerView.Adapter
,用于呈现列表的布局。在父Activity中,我有两个可以从UI更改的变量。这些参数用于呈现RecyclerView项的一部分。
我知道我可以通过Adapter构造函数传递一些数据,但这是一次性的事情。如何将数据传递到适配器并动态更改?
答案 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
}
在您的活动存储中,适配器的全局引用然后在需要时调用上面的函数