在通过数据绑定和实时数据实现MVVM体系结构时遇到了出现错误“找不到符号方法setUser_list_user_view(User_List_UserViewModel)的问题”的问题,我已经做了很多次的重建,清理和其他工作,但是此错误不会消失..我正在做第一次不确定是否已实施正确的方法。下面是我的代码。提前感谢您的帮助
User_List_UserViewModel.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_UserAdapter.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;
}
}
答案 0 :(得分:1)
欢迎使用数据绑定。
您尚未显示布局,因此我看不到什么是变量名,您已进入布局。但这是一个示例,它将向您解释技巧。
1>在布局中创建类型为<variable
的{{1}}项。
User_List_UserViewModel
2>现在您可以使用<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>
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
,这也是为什么名字令人困惑的原因。更新 如果您未生成类或变量,请参见此答案。 https://stackoverflow.com/a/51579759/6891563
答案 1 :(得分:0)
能够通过从setUser_list_user中删除零食来解决。因此它成为setUserlistuser。这工作了。结果,将类名从User_List_User更改为UserListUser。这样可以解决问题。感谢您为我提供的所有帮助。肯定也会通过命名约定。也许您可以在提供给我的链接中将我的发现作为注释。这将对初学者有所帮助。