我有一个 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中测试了我的代码希望这对你有用
在适配器中创建接口(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/