Nano Hash - криптовалюты, майнинг, программирование

Метод, используемый вместе с OnCreate() для обновления активности?

У меня есть активность студии Android, которая содержит RecyclerView, адаптер и невидимую кнопку внизу активности. Каждый itemView внутри RecyclerView также имеет CheckBox. Внутри моего класса адаптера у меня инициализирован мой флажок и есть что-то вроде - если checkbox.isChecked - тогда сделайте общедоступным 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;

            }
        }

    });



}

Основной класс деятельности

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








       }


  }

Ответы:


1

Если вы хотите отправить num p из адаптера RecyclerView в активность, вам нужен интерфейс, чтобы сделать это, выполнив следующие шаги:

протестировали мой код в 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);
22.05.2020
  • вы имеете в виду создание интерфейса в адаптере? 22.05.2020
  • Идеальный. Работает безупречно. Могу я спросить вас, почему мы должны использовать интерфейс для этой работы? 22.05.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..