尽管在绑定类中可用,但找不到符号方法setUser_list_user_view(User_List_UserViewModel)

时间:2018-09-13 11:53:06

标签: android mvvm android-databinding android-viewmodel

在通过数据绑定和实时数据实现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;

    }
}

2 个答案:

答案 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"/> 

建议

  • 请参阅Java命名惯例https://www.geeksforgeeks.org/java-naming-conventions/
  • 您可以使模型名称仅为 <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。这样可以解决问题。感谢您为我提供的所有帮助。肯定也会通过命名约定。也许您可以在提供给我的链接中将我的发现作为注释。这将对初学者有所帮助。