【问题标题】:Method used alongside OnCreate() to update an activity?与 OnCreate() 一起使用的方法来更新活动?
【发布时间】:2020-05-23 02:52:55
【问题描述】:

我有一个 android studio 活动,其中包含一个 RecyclerView、Adapter 和一个位于活动底部的不可见按钮。 RecyclerView 中的每个 itemView 也都有一个 CheckBox。在我的适配器类中,我初始化了我的复选框,并且有类似的东西 - 如果 checkbox.isChecked - 然后 make public static int num = 1 else num = 2;然后将此静态变量发送到我的 Activity_main ,我需要变为可见的底部按钮可以使用 if 语句显示 - if Adapter.num == 1 then button.MakeVisible(true);

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

适配器类

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);
   }








       }


  }

【问题讨论】:

    标签: java android android-studio android-recyclerview


    【解决方案1】:

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

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

    1. 在适配器中创建接口

          // 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 终于通知主活动更新

    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);
    

    【讨论】:

    • 你的意思是在Adapter中创建一个接口?
    • 完美。完美运行。我能问你为什么我们必须为这项工作使用接口吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多