我正在尝试将图片视图用作按钮。因此,当用户点击图像时,我希望将一个不同的xml文件显示为布局。
我改变如下..
<ImageView
android:id="@+id/telugu"
android:layout_width="130dp"
android:layout_height="25dp"
android:layout_x="-34dp"
android:layout_y="315dp"
android:clickable="true"
android:onClick="myClickHandler"
和myClickHandler是..
public void myClickHandler(View view) {
switch (view.getId()) {
case R.id.arts:
setContentView(R.layout.arts);
case R.id.music:
setContentView(R.layout.music);
问题是我无法进入特定的布局。无论我选择哪种图像,它都会采用相同的布局。
答案 0 :(得分:3)
您的switch语句错误
switch (view.getId()) {
case R.id.arts:
setContentView(R.layout.arts);
case R.id.music:
setContentView(R.layout.music);
}
应该是
switch (view.getId()) {
case R.id.arts:
setContentView(R.layout.arts);
break;
case R.id.music:
setContentView(R.layout.music);
break;
}
您没有在交换机中放置中断,这允许您的交换机下拉到下一个语句。这意味着您调用的setContentView方法将始终是交换机中的底部方法。在我展示的那里添加“break;”,你会很高兴
我不确定人们会想到你不能多次调用setContentView。这当然是可能的,我只是自己测试以确保。
问题在于,只需调用setContentView即可在屏幕上管理数据。 如果您的屏幕上有2个按钮的布局,然后切换到屏幕上有3个按钮的布局,您必须以某种方式区分代码中的这些布局。在这种情况下,使用全新的活动将是更好的选择。逻辑代码更少,整体更易于管理。但是,我确信有些情况下在同一个活动中多次调用setContentView是合适的答案
答案 1 :(得分:2)
您应该为该xml文件创建另一个类。所以你会有一个arts.java arts.xml,music.java music.xml。然后打电话并打算参加那项活动
ImageView buttonLA = (ImageView) findViewById(R.id.buttonLouisiana);
buttonLA.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent myIntent = new Intent(arts.this, music.class);
startActivityForResult(myIntent, 0);
}
});
答案 2 :(得分:0)
你不允许 每次活动可以多次调用setContentView(),而@dymmeh对你的break语句是正确的。
我认为你仍然应该考虑use something like ViewSwitcher来改变你在一个应用程序中显示的布局。或者将您的不同布局划分为他们自己的活动,这可以使您的应用程序使用后退按钮“很好地”播放。
Here is a nice view switcher tutorial如果你选择走这条路。
答案 3 :(得分:0)
为此创建单独的类。您可以像这样使用Imageview OnClcikListener。
ImageView iv =(ImageView)findViewById(R.id.imageView1); iv.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
// TODO Auto-generated method stub
Intent iv=new Intent();
iv.setClass(getApplicationContext(), art.class);
startActivity(iv);
}
});