虽然实现MVVM架构与数据绑定和实时数据遇到问题,但是收到错误“无法找到符号方法setUser_list_user_view(User_List_UserViewModel)”我已经做了很多时间重建,清理和其他东西但是这个错误没有进行..我这是第一次这样做所以不确定是否实施了正确的方法。以下是我的代码。 Thnx提前帮忙
user_list_user view model.Java
public class User_List_UserViewModel extends AndroidViewModel {
private User_List_UserRepository mRepository;
private LiveData<List<User>> mAllUser;
public User_List_UserViewModel(Application application) {
super(application);
mRepository = new User_List_UserRepository(application);
mAllUser = mRepository.getmUserlist();
}
LiveData<List<User>> getAllWords() {
return mAllUser;
}
public void insert(User user) {
mRepository.insert(user);
}
}
user_list_user adapter.Java
public class User_List_UserAdapter extends RecyclerView.Adapter<User_List_UserAdapter.User_List_ViewHolder> {
private LayoutInflater mInflater;
private List<User_List_UserViewModel> user_list_userViewModels;
class User_List_ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private PeopleListItemBinding mBinding;
private TextView mFirst_NameTextView;
public User_List_ViewHolder(PeopleListItemBinding itemBinding) {
super(itemBinding.getRoot());
mBinding = itemBinding;
}
public void bind(User_List_UserViewModel user_list_userViewModel) {
this.mBinding.setUser_list_user_view(user_list_userViewModel);
mBinding.executePendingBindings();
}
public PeopleListItemBinding getPeopleListItemBInding() {
return mBinding;
}
@Override
public void onClick(View v) {
}
}
public User_List_UserAdapter(List<User_List_UserViewModel> newsList) {
this.user_list_userViewModels = newsList;
}
@NonNull
@Override
public User_List_ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (mInflater == null) {
mInflater = LayoutInflater.from(parent.getContext());
}
PeopleListItemBinding peopleListItemBinding = DataBindingUtil.inflate(mInflater, R.layout.people_list_item, parent, false);
return new User_List_ViewHolder(peopleListItemBinding);
}
@Override
public void onBindViewHolder(@NonNull User_List_ViewHolder holder, int position) {
User_List_UserViewModel userViewModel = user_list_userViewModels.get(position);
holder.bind(userViewModel);
}
@Override
public int getItemCount() {
if (user_list_userViewModels != null)
return user_list_userViewModels.size();
else return 0;
}
}
people_list_fragment.Java
public class People_List_Fragment extends Fragment {
List<User_List_UserViewModel> user_list = new ArrayList<>();
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup
container, Bundle savedInstanceState) {
final RecyclerView rv = (RecyclerView) inflater.inflate(
R.layout.people_list, container, false);
rv.setLayoutManager(new LinearLayoutManager(rv.getContext()));
rv.setAdapter(new User_List_UserAdapter(user_list));
return rv;
}
}
欢迎来到数据绑定。
你没有显示你的布局,所以我看不到变量名是什么,你已经采用了你的布局。但这是一个例子,它将解释你的技巧。
1>在布局中创建<variable
类型的User_List_UserViewModel
项目。
<layout xmlns:android="http://schemas.android.com/apk/res/android"
>
<data>
<variable
name="item"
type="com.sample.User_List_UserViewModel"/>
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!--other views-->
</LinearLayout>
</layout>
2>现在你可以使用setItem(User_List_UserViewModel)
public void bind(User_List_UserViewModel model) {
this.mBinding.setItem(model);
}
不要使用长或混乱的变量名称
<variable
name="User_List_UserViewModel"
type="com.sample.User_List_UserViewModel"/>
使用短名称,易于使用
<variable
name="item"
type="com.sample.User_List_UserViewModel"/>
建议
UserModel
,再次为什么一个令人困惑的名字。更新如果未生成类或变量,请参阅此答案。 UserAdapter
能够通过从setUser_list_user中删除零食来解决。所以它变成了setUserlistuser。这很有效。结果将类名从User_List_User更改为UserListUser。这将解决问题。 Thanx Khemraj为您提供的所有帮助。肯定也会通过命名约定。也许您可以将我的发现作为一个注释放在您提供给我的链接中。这将有助于初学者..