找不到符号方法setUser_list_user_view(User_List_UserViewModel)虽然它在Binding类中可用

问题描述 投票:0回答:2

虽然实现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;

    }
}
android mvvm android-databinding android-viewmodel
2个回答
1
投票

欢迎来到数据绑定。

你没有显示你的布局,所以我看不到变量名是什么,你已经采用了你的布局。但这是一个例子,它将解释你的技巧。

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

建议

更新如果未生成类或变量,请参阅此答案。 UserAdapter


0
投票

能够通过从setUser_list_user中删除零食来解决。所以它变成了setUserlistuser。这很有效。结果将类名从User_List_User更改为UserListUser。这将解决问题。 Thanx Khemraj为您提供的所有帮助。肯定也会通过命名约定。也许您可以将我的发现作为一个注释放在您提供给我的链接中。这将有助于初学者..

© www.soinside.com 2019 - 2024. All rights reserved.