Cannot find symbol for ActivityMainBindingImpl ^

29 Views Asked by At

If I remove app:userList="@{viewModel.userList}" from RecyclerView inside activity_main.xml, it is able to build project, but using it gives me error: cannot find symbol for ActivityMainBindingImpl ^

Following are the files:

  1. activity_main.xml

     <data>
    
         <variable
             name="viewModel"
             type="com.example.databindingmvvmrespositoryjava.data.viewmodel.UserViewModel" />
     </data>
    
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:orientation="vertical"
         android:padding="16dp"
         tools:context=".MainActivity">
    
         <TextView
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="User List"
             android:textSize="18sp"
             android:textStyle="bold" />
    
         <androidx.recyclerview.widget.RecyclerView
             android:id="@+id/recycler_view"
             android:layout_width="match_parent"
             app:userList="@{viewModel.userList}"
             android:layout_height="0dp"
             android:layout_weight="1" />
    
     </LinearLayout>
    
  2. MainActivity.java

     public class MainActivity extends AppCompatActivity {
    
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
    
         ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
         UserViewModel viewModel = new ViewModelProvider(this).get(UserViewModel.class);
         binding.setViewModel(viewModel);
         binding.setLifecycleOwner(this);
    
         UserAdapter adapter = new UserAdapter();
         binding.recyclerView.setAdapter(adapter);
    
         // Observe changes in user list
         viewModel.getUserList().observe(this, users -> adapter.setUserList(users));
     }
    

    }

  3. list_item

     <data>
    
         <variable
             name="userData"
             type="com.example.databindingmvvmrespositoryjava.data.model.User" />
     </data>
    
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:orientation="vertical">
    
         <TextView
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="@{userData.name}"
             android:textSize="24sp" />
    
     </LinearLayout>
    
  4. UserAdapter

     public class UserAdapter extends RecyclerView.Adapter<UserAdapter.ViewHolder> {
    
     private List<User> userList;
    
     public void setUserList(List<User> userList) {
         this.userList = userList;
         notifyDataSetChanged();
     }
    
     @NonNull
     @Override
     public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
         ListItemBinding binding = ListItemBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
         return new ViewHolder(binding);
     }
    
     @Override
     public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
         User user = userList.get(position);
         holder.binding.setUserData(user);
         holder.binding.executePendingBindings();
     }
    
     @Override
     public int getItemCount() {
         return userList.size();
     }
    
     static class ViewHolder extends RecyclerView.ViewHolder {
    
         private final ListItemBinding binding;
    
         public ViewHolder(@NonNull ListItemBinding binding) {
             super(binding.getRoot());
             this.binding = binding;
         }
     }
    

    }

  5. UserViewModel

     public class UserViewModel extends ViewModel {
    
     private final MutableLiveData<List<User>> userList = new MutableLiveData<>();
     private final UserRepository userRepository;
    
     public UserViewModel() {
         userRepository = new UserRepository();
         fetchUsers();
     }
    
     public LiveData<List<User>> getUserList() {
         return userList;
     }
    
     private void fetchUsers() {
         userRepository.getUsers(new UserRepository.UserCallback() {
             @Override
             public void onSuccess(List<User> users) {
    
                 for (int i = 0; i < users.size(); ++i) {
                     Log.i("onresponse....", "onSuccess: " + users.get(i).getName());
                 }
    
                 userList.setValue(users);
             }
    
             @Override
             public void onFailure(String errorMessage) {
                 // Handle failure
             }
         });
     }
    

    }

  6. User.java

     public class User {
     private String name;
    
     public String getName() {
         return name;
     }
    

    }

0

There are 0 best solutions below