java - 与 OnCreate() 一起使用的方法来更新 Activity ?

标签 java android android-studio android-recyclerview

我有一个 android studio Activity ,其中包含 RecyclerView、适配器和 Activity 底部的一个不可见按钮。 RecyclerView 内的每个 itemView 也有一个 CheckBox。在我的适配器类中,我初始化了复选框,并具有类似 - if checkbox.isChecked - then make public static int num = 1 else num = 2; 的内容;然后,这个静态变量被发送到我的 Activity_main,其中我需要变得可见的底部按钮可以使用 if 语句可见 - if Adapter.num == 1 then button.MakeVisible(true);

问题是它在我的 Oncreate 中,只有在 Activity 完成后才会被调用。静态号码发送没有问题,但 Activity 不会更新以实际显示这一点。我必须重新启动 Activity 才能使按钮真正可见。

适配器类

public static int p = 0;
 @Override
    public void onBindViewHolder(@NonNull final Adapter.CustomViewHolder holder, 
  final int position) {

                    addedCars = new ArrayList<>();

                    holder.car.setText(mCars.get(position).getCarName());






                    holder.mCheckBox.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            if(holder.mCheckBox.isChecked()){
                                Log.d("tag1", "checked");

                                addedCars.add(mCars.get(position));
                                String x = Integer.toString(addedCars.size());
                                Log.d("tag1", x );

                                p = 1;



                                holder.mButton2.setOnClickListener(new View.OnClickListener() {
                                    @Override
                                    public void onClick(View view) {

                                    }
                                });



            }
            else {
                Log.d("tag1", "unchecked");
                addedCars.remove(mCars.get(position));

                p = 2;

            }
        }

    });



}

Activity_Main类

 public class MainActivity extends AppCompatActivity {

RecyclerView mRecyclerView;
Adapter mAdapter;
RecyclerView.LayoutManager mLayoutManager;




Button mButton;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mRecyclerView = findViewById(R.id.RecyclerView);

    mButton = findViewById(R.id.button);





    ArrayList<Car> cars = new ArrayList<>();

    cars.add(new Car("Toyota"));
    cars.add(new Car("Ford"));
    cars.add(new Car("Tesla"));

    mAdapter = new Adapter(cars);
    mRecyclerView.setAdapter(mAdapter);
    mLayoutManager = new LinearLayoutManager(this);
    mRecyclerView.setLayoutManager(mLayoutManager);
    mRecyclerView.setHasFixedSize(true);



   if (mAdapter.p == 1){
       mButton.setVisibility(View.VISIBLE);
   }








       }


  }

最佳答案

如果您想将 num p 从 RecyclerView Adapter 发送到 Activity,您需要一个接口(interface)来执行以下步骤:

已经在android中测试了我的代码希望这对你有用

  1. 在适配器中创建接口(interface)

        // create an instance of OnItemChangeListener 
        public OnItemChangeListener onItemChangeListener;
    
        public interface OnItemChangeListener {
             void onItemChanged(int p);
         }
    
         //set the instance of onItemChangeListener from the main activity
         public void setOnItemChangeListener(OnItemChangeListener onItemChangeListener) {
                this.onItemChangeListener = onItemChangeListener;
         }
    
          holder.mCheckBox.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        if(holder.mCheckBox.isChecked()){
                            Log.d("tag1", "checked");
    
                            addedCars.add(mCars.get(position));
                            String x = Integer.toString(addedCars.size());
                            Log.d("tag1", x );
    
                            p = 1;
                            /*
                             * notify updated value using call back 
                             */
    
                             onItemChangeListener.onItemChanged(p);
    
    
    
                            holder.mButton2.setOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View view) {
    
                                }
                            });
    
    
    
        }
    

2最终通知主activity更新

mAdapter = new Adapter(cars);

mAdapter.setOnItemChangeListener(new /*your adapter name */.OnItemChangeListener() {
        @Override
        public void onItemChanged(int p) {
            // here you will get the latest updated value of p 
            // now you can update you view accordingly
        }
});



mRecyclerView.setAdapter(mAdapter);
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
mRecyclerView.setHasFixedSize(true);

关于java - 与 OnCreate() 一起使用的方法来更新 Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61961288/

相关文章:

android - 是否可以在 Android 中使用 Maven 而不是 Gradle?

android-studio - 如何从 Android Studio gradle 构建中排除某些文件?

java - 如何在 Junit 测试期间将日志级别设置为 DEBUG?

安卓应用 : text getting cropped on smaller devices

java - Arraylist 上的谓词

android - 打开我的应用程序时如何显示用户的当前位置

java - 从 JSONArray 中提取字符串

java - 如何将bean属性设置为另一个bean的属性

java - RestAdapter Retrofit(2.0.2) 无法解析符号 android studio

java - 弗林克 : is it losing records?