#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
, ваш проект вообще запущен?
Здесь есть разные проблемы :
- Вы нигде не используете
Sentence()
метод - Вы расширяетесь
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
});
}