Почему случайные слова из массива не отображаются, когда я нажимаю кнопку?

#java #android #arrays #random

Вопрос:

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

Android Studio не показывает никаких ошибок, но ничего не происходит, когда я нажимаю на кнопку.

Ценю вашу помощь. Спасибо

Вот мой код. MainActivity.java

 
package com.example.arraytesting4;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import java.lang.String;
import java.lang.StringBuilder;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    ArrayList<String> SList;
    TextView Sentence;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Sentence = (TextView) findViewById(R.id.Sentence);

    }


public void buttonClicked(View v){
    printJoke();
}

public void printJoke() {
    StringBuilder SentenceStringBuilder = new StringBuilder();
    for (String s : SList) {
        SentenceStringBuilder.append(s   "n");
    }
    Sentence.setText(SentenceStringBuilder.toString());
}
}
 

В SList.java

 
package com.example.arraytesting4;
import java.util.*;

import java.util.ArrayList;

public class SList extends MainActivity {
    public void Sentence(){

        ArrayList<String> SList = new ArrayList<String>();

        SList.add("Apple");
        SList.add("Banana");
        SList.add("Ciku");
        SList.add("Danny ate the others.");


    }
}
 

Комментарии:

1. SList-это ЛОКАЛЬНАЯ переменная в предложении вашего метода. Это отличается от списка переменных-членов, объявленного в MainActivity.

2. Попробуйте использовать другое имя для списка массивов.

Ответ №1:

Ваша иерархия здесь не имеет никакого смысла. Я не знаю, что вы пытались или думали, но это неверно.

Если вы расширяете свой MainActivity , то ваш Slist тоже есть Activity , ваш проект вообще запущен?

Здесь есть разные проблемы :

  1. Вы нигде не используете Sentence() метод
  2. Вы расширяетесь MainActivity , чтобы создать метод ArrayList

Простым способом должно быть создание метода для инициализации этого ArrayList внутри вашего MainActivity , а затем он должен работать.

Создайте метод для инициализации списка и вызовите этот метод внутри onCreate()

 private void initialiseArray(){
        SList = new ArrayList<>();
        SList.add("Apple");
        SList.add("Banana");
        SList.add("Ciku");
        SList.add("Danny ate the others.");
    }
 

Также не забудьте удалить Slist класс.

Примечание: Я не знаю , хотите ли вы просто показать одно предложение на TextView или все элементы в ArrayList , в этом случае, как вы это сделали, будут показаны все элементы.

Ответ №2:

вам просто нужно написать следующий код в вашем onCreate после кнопки импорта,

 clickMe.onClickListener((View v) -> {
    Sentence.setText(getRandomFromList(getSampleList())); 
});
 

Теперь добавьте ниже два метода для создания списка и получения случайного из списка,

 private ArrayList<String> getSampleList(){
     ArrayList<String> list = new ArrayList();
     list.add("Apple");
     list.add("Banana");
     list.add("Water Melon");
     list.add("Fruit X");
     list.add("Fruit Y");
     return list;
 }
 
 private String getRandomFromList(ArrayList<String> list){
     Random rand = new Random();
     return list.get(rand.nextInt(list.size()));
 }
 

Ответ №3:

Вы еще не объявили свою кнопку.

сделайте что-нибудь вроде этого

 Button *your button* = (Button) findViewById(R.id.*your button id*);

 

затем, вместо создания функции,
нажатой кнопкой мыши, создайте кнопку на прослушивателе щелчков в своей функции onCreate.
что-то вроде этого

 *your button*.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                 printJoke()
            }
        });
 

Ответ №4:

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

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Sentence = (TextView) findViewById(R.id.Sentence);
    Button myButton = (Button) findViewById(r.id.myButtonId);

    myButton.setOnClickListener((View v) -> {
       buttonClicked(); //or you can delete buttonClicked Method and call printJoke Method here
    });

}