В моем приложении для Android я нажимаю кнопку «Случайный», и приложение показывает мне случайный файл XML из first.xml, second.xml или third.xml. Это прекрасно работает, но мне было интересно, есть ли более простой или приятный способ реализовать его, если у вас более 100 XML-файлов.
Я нашел некоторый код (который отлично работает), который показывает случайные ImageViews:
private Integer [] mImageIds = {
R.drawable.one,
R.drawable.two,
R.drawable.three,
};
private static final Random rgenerator = new Random();
private ImageView iv;
.
.
.
Integer q = mImageIds[rgenerator.nextInt(mImageIds.length)];
iv = (ImageView) findViewById(R.id.imageviewyeah);
iv.setImageResource(q);
Вот так выглядит мой main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<Button
android:id="@+id/first_button"
android:onClick="change"
android:text="first"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/second_button"
android:onClick="change"
android:text="second"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/third_button"
android:onClick="change"
android:text="third"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/random_button"
android:onClick="change"
android:text="random"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
и это код, который обрабатывается при нажатии на кнопку:
package com.random;
import java.util.Random;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class Main extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void change(final View view){
switch (view.getId()) {
case R.id.first_button:
startActivity(new Intent(this, FirstPage.class));
break;
case R.id.second_button:
startActivity(new Intent(this, SecondPage.class));
break;
case R.id.third_button:
startActivity(new Intent(this, ThirdPage.class));
break;
case R.id.random_button:
Random random = new java.util.Random();
int rand = random.nextInt(3);
switch (rand) {
case 0:
startActivity(new Intent(this, FirstPage.class));
break;
case 1:
startActivity(new Intent(this, SecondPage.class));
break;
case 2:
startActivity(new Intent(this, ThirdPage.class));
break;
}
}
}
}
Любая помощь очень ценится!
Теперь у меня довольно похожий вопрос. До сих пор я реализовал кнопку «Случайная». Если щелкнуть по нему, будет показан случайный xml-файл. Примечание. Содержимое (TextViews, ImageViews) в xml-файлах отличается, но код java (нажатие кнопок и т. Д.) Одинаков!
Это код, если вы нажмете кнопку «Случайная»:
switch (view.getId()) {
case R.id.first_button:
startActivity(new Intent(this, FirstPage.class));
break;
case R.id.second_button:
startActivity(new Intent(this, SecondPage.class));
break;
case R.id.third_button:
startActivity(new Intent(this, ThirdPage.class));
break;
case R.id.random_button:
Intent intent = new Intent(this, DisplayRandomPage.class);
startActivity(intent);
и это в DisplayRandomPage.class
public class DisplayRandomPage extends Activity {
private Integer [] mLinearLayoutIds = {
R.layout.one
R.layout.two,
R.layout.three
};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Random random = new java.util.Random();
int rand = random.nextInt(3);
setContentView(mLinearLayoutIds[rand]);
}
}
Я хотел бы создать класс DisplaySpecificPage.class. Выше я показал свой main.class с условием switch-case. Поэтому, когда я нажимаю на первую кнопку, она запускает FirstPage.class, нажимая на вторую, она запускает SecondPage.class и так далее. Поэтому для каждого xml-файла мне нужно создать новый java-класс, хотя разные java-классы делают все то же самое. Только xml-файлы разные. Итак, я хотел бы поставить что-то вроде этого:
псевдо-код:
case R.id.first_button:
startActivity(new Intent(this, DisplaySpecificPage.class)) with R.layout.first_page;
break;
как передать идентификатор из макета (R.layout.first_page)?