仅显示一个java类的特定xml布局
我以前有一个非常类似的问题,我想显示随机xml布局。在Ben Williams的帮助下,我使用了一个名为DisplayRandomPage.class的类完成了这项工作,我有一个带有四个按钮的main.xml布局 这是Main.class的代码:仅显示一个java类的特定xml布局,java,android,layout,Java,Android,Layout,我以前有一个非常类似的问题,我想显示随机xml布局。在Ben Williams的帮助下,我使用了一个名为DisplayRandomPage.class的类完成了这项工作,我有一个带有四个按钮的main.xml布局 这是Main.class的代码: switch (view.getId()) { case R.id.first_button: startActivity(new Intent(this, FirstPage.class)); break; case R.id
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);
public class Main extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void change(final View view) {
Intent intent2 = null;
final Intent intent = new Intent(this, DisplaySpecificPage.class);
switch (view.getId()) {
case R.id.first_button:
intent.putExtra("mylayout", R.layout.layout1);
break;
case R.id.second_button:
intent.putExtra("mylayout", R.layout.layout2);
break;
case R.id.third_button:
intent.putExtra("mylayout", R.layout.layout3);
break;
case R.id.random_button:
intent2 = new Intent(this, DisplayRandomPage.class);
startActivity(intent2);
}
// if the Random button was not clicked, if-condition is true.
if (intent2 == null)
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]);
}
}
public class DisplaySpecificPage extends Activity{
public void onCreate(Bundle savedInstanceState) {
final int layout = getIntent().getIntExtra("mylayout", R.layout.one);
super.onCreate(savedInstanceState);
setContentView(layout);
}
}
public class DisplayRandomPage extends Activity {
private Integer [] mLinearLayoutIds = {
R.layout.layout1,R.layout.layout2,R.layout.layout3
};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Random random = new java.util.Random();
int rand = random.nextInt(mLinearLayoutIds.length);
setContentView(mLinearLayoutIds[rand]);
}
}
我想做的是创建一个DisplaySpecificPage.class。上面我展示了带有switch case子句的main.class。因此,当我单击第一个按钮时,它将启动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)传递ID?您应该将
开关
语句更改为
final Intent intent = new Intent(this, DisplaySpecificPage.class);
switch (view.getId()) {
case R.id.first_button:
intent.putExtra("mylayout", R.layout.one);
break;
case R.id.second_button:
intent.putExtra("mylayout", R.layout.two);
break;
case R.id.third_button:
intent.putExtra("mylayout", R.layout.three);
break;
case R.id.random_button:
intent.putExtra("mylayout", randomNumber);
startActivity(intent);
}
startActivity(intent);
这样,无论按下哪个按钮,您都可以启动相同的活动,并且在DisplaySpecificPage
activity的onCreate
方法中,您应该将内容设置为此传递的布局:
final int layout = getIntent().getIntExtra("mylayout", R.layout.one);
setContentView(layout);
当启动名为“mylayout”的DisplaySpecificPage
活动时,上面的代码向intent传递一个额外的参数
在DisplaySpecificPage
class'onCreate
方法中,您只需使用传递的意图的getIntExtra
方法检索此额外参数(getIntent()
将为您返回它),您可以通过setContentView(layout)
将此DisplaySpecificPage
活动的内容视图设置为传递的布局
不过,您应该确保始终向该目的传递有效的布局标识符,否则在尝试充气时会出现异常(因此应正确选择randomNumber
)
更新通过向意图中添加额外内容,您可以参数化您的活动 因此,使用
intent.putExtra(“paramName”,paramValue)
可以将paramValue
名称上的paramValue
值传递给以此意图启动的活动
您希望启动DisplaySpecificPage
活动,但希望它根据您单击的按钮具有不同的布局所以你创造了一个意图:
final Intent intent = new Intent(this, DisplaySpecificPage.class);
在通过调用startActivity(intent)
启动活动之前,您必须将此额外信息放入intent
中,以便DisplaySpecificPage
活动知道应将哪个布局设为其内容视图:
因此,如果按下第二个按钮,您希望新活动的布局是由res/layout
文件夹中的two.xml
定义的布局。它由asR.layout.two
引用(这是一个静态int
值)
此行将版面的值作为额外值放入intent
对象,现在您可以启动活动了,版面引用将传递给它
“mylayout”是为参数选择的名称。它可以是任何内容(有效),将在DisplaySpecificPage
活动中用于检索布局的引用。通过以下名称检索:
final int layout = getIntent().getIntExtra("mylayout", R.layout.one);
getIntExtra
方法从名为“mylayout”的intent
获取整数值,如果找不到,则返回R.layout.one
如果要处理这种情况(当未设置名为mylayout
的参数时),可以编写
final int layout = getIntent().getIntExtra("mylayout", -1);
if (layout < 0)
{
//TODO: no layout reference was passed
}
final int layout=getIntent();
如果(布局<0)
{
//TODO:未传递布局引用
}
这是我的最终代码:
Main.class:
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);
public class Main extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void change(final View view) {
Intent intent2 = null;
final Intent intent = new Intent(this, DisplaySpecificPage.class);
switch (view.getId()) {
case R.id.first_button:
intent.putExtra("mylayout", R.layout.layout1);
break;
case R.id.second_button:
intent.putExtra("mylayout", R.layout.layout2);
break;
case R.id.third_button:
intent.putExtra("mylayout", R.layout.layout3);
break;
case R.id.random_button:
intent2 = new Intent(this, DisplayRandomPage.class);
startActivity(intent2);
}
// if the Random button was not clicked, if-condition is true.
if (intent2 == null)
startActivity(intent);
}
}
DisplaySpecificPage.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]);
}
}
public class DisplaySpecificPage extends Activity{
public void onCreate(Bundle savedInstanceState) {
final int layout = getIntent().getIntExtra("mylayout", R.layout.one);
super.onCreate(savedInstanceState);
setContentView(layout);
}
}
public class DisplayRandomPage extends Activity {
private Integer [] mLinearLayoutIds = {
R.layout.layout1,R.layout.layout2,R.layout.layout3
};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Random random = new java.util.Random();
int rand = random.nextInt(mLinearLayoutIds.length);
setContentView(mLinearLayoutIds[rand]);
}
}
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]);
}
}
public class DisplaySpecificPage extends Activity{
public void onCreate(Bundle savedInstanceState) {
final int layout = getIntent().getIntExtra("mylayout", R.layout.one);
super.onCreate(savedInstanceState);
setContentView(layout);
}
}
public class DisplayRandomPage extends Activity {
private Integer [] mLinearLayoutIds = {
R.layout.layout1,R.layout.layout2,R.layout.layout3
};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Random random = new java.util.Random();
int rand = random.nextInt(mLinearLayoutIds.length);
setContentView(mLinearLayoutIds[rand]);
}
}
非常感谢rekaszeru 你好,雷卡泽鲁!我只是想给出一个答案,但遗憾的是,我不能因为我是一个新用户。。。不管怎么说,你贴的东西都有用!谢谢你!我还有最后一个问题<代码>最终int布局=getIntent().getIntExtra(“mylayout”,R.layout.one)R.layout我说得对吗?一个被我按下的按钮的布局所取代。假设我按下第二个按钮,在case子句中,我放入了
intent.putExtra(“mylayout”,R.layout.two)代码>我在那里吗?最后,我想知道“mylayout”的作用是什么?再次衷心感谢!您应该放置新活动所需的布局,而不是R.layout.one
(因此绝对不是按钮的布局,除非您更改新活动的onCreate方法,并根据单击按钮的布局决定新布局,这会很奇怪…然后将id传递给布局引用将是更好的解决方案)。请参阅我的更新以获得更多解释。我希望您会成功:)明白了!(-有时注释不必为15个字符长;-))