Приложение не обновляет параметры в списке

Я сделал приложение, которое берет слова и определения из двух текстовых файлов (один со словом, а другой с определениями). Случайное число используется для генерации слова для отображения, а затем перемешивается и выстраивает 5 определений вместе с правильным для отображения параметров. Приложение работает отлично, но при выборе любого параметра оно не обновляет параметры, добавляя новые для следующего слова.

ListView list;

ArrayAdapter<String> adap;
ArrayList<String> word=new ArrayList<>();
List<String> dfn=new ArrayList<>();
List<String> dfn2=new ArrayList<>();

String que = "",ans = "";
int counter=0;

private void random(){
    Random num = new Random();
    int nw = num.nextInt(word.size());

    que = word.get(nw);
    ans = dfn2.get(nw);
    dfn = dfn2;
    dfn.remove(ans);
    Collections.shuffle(dfn);
    dfn = dfn.subList(0,4);
    dfn.add(ans);
    Collections.shuffle(dfn);
    list = (ListView) findViewById(R.id.li);


    adap = new ArrayAdapter<>(
            this,
            android.R.layout.simple_list_item_1,
            dfn
    );
    TextView t = (TextView) findViewById(R.id.t);
    t.setText(que);
}


@Override
protected void onCreate(Bundle savedInstanceState) {
    TextView t2 = (TextView) findViewById(R.id.t2);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_game);
    Scanner sc = new Scanner(getResources().openRawResource(R.raw.word2));
    Scanner sc2 = new Scanner(getResources().openRawResource(R.raw.def2));
    while(sc.hasNextLine()&&sc2.hasNextLine()){
        String a = sc.nextLine();
        String b = sc2.nextLine();
        word.add(a);
        dfn.add(b);
        dfn2.add(b);


    }
    sc.close();
    sc2.close();
    random();
    run();
}



public void run(){


    list.setAdapter(adap);
    list.setOnItemClickListener((adapterView, view,i,l)->{//lambda expression
                if (dfn.get(i).equals(ans)){
                    Toast.makeText(getApplicationContext(),"Correct!",Toast.LENGTH_SHORT).show();
                    counter++;

                }
                else{
                    Toast.makeText(getApplicationContext(),"Wrong!",Toast.LENGTH_SHORT).show();
                }
        TextView t2 = (TextView) findViewById(R.id.t2);
                t2.setText("Score : "+counter);
                notifyDataChanged();

            }

    );

}

public void notifyDataChanged() {

    random();
    adap.notifyDataSetChanged();
}


}

Я хочу, чтобы параметры заменялись новыми после каждого щелчка

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
30
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы действительно создаете новый адаптер с каждым щелчком, но вы не добавляете новый адаптер в список.

Вместо того, чтобы каждый раз создавать новый адаптер, вам следует просто обновлять значения. В этом случае вам также нужно вызвать notifyDataSetChanged (что вы уже делаете, но вам не нужно)

if (adapt == null) {
    adap = new ArrayAdapter<>(
            this,
            android.R.layout.simple_list_item_1,
            dfn
    );
} else {
   adapt.updateItems(dfn);
   adap.notifyDataSetChanged();
}

public void notifyDataChanged() {
    random();
}

Другие вопросы по теме