не удается найти метод символа setUser_list_user_view (User_List_UserViewModel), хотя он доступен в классе привязки - PullRequest
0 голосов
/ 13 сентября 2018

При реализации архитектуры 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 голосов
/ 17 сентября 2018

Может быть решен путем удаления закусок из setUser_list_user.Так и стало setUserlistuser.Это сработало.В результате изменилось имя класса с User_List_User на UserListUser.Это решит проблему.Спасибо Khemraj за всю помощь, которую вы оказали мне.Обязательно пройдем и соглашение об именах.Возможно, вы можете поместить мои выводы в качестве примечания в ссылке, которую вы предоставили мне пройти.Это поможет начинающим ..

0 голосов
/ 14 сентября 2018

добро пожаловать в привязку данных.

Вы не показали свой макет, поэтому я не вижу, что такое имя переменной, которое вы указали в вашем макете. Но вот пример, который объяснит вам трюк.

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

Предложения

  • См. Соглашения по именованию Java https://www.geeksforgeeks.org/java-naming-conventions/
  • Вы можете сделать название модели просто UserModel, почему такое длинное имя?
  • Вы можете сделать UserAdapter, опять же, почему запутанное имя.

Обновление Пожалуйста, смотрите этот ответ, если ваши классы или переменные не генерируются. https://stackoverflow.com/a/51579759/6891563

...