我必须按下代码才能在按钮点击时选择布局。
View.OnClickListener handler = new View.OnClickListener(){
public void onClick(View v) {
switch (v.getId()) {
case R.id.DownloadView:
// doStuff
setContentView(R.layout.main);
break;
case R.id.AppView:
// doStuff
setContentView(R.layout.app);
break;
}
}
};
findViewById(R.id.DownloadView).setOnClickListener(handler);
findViewById(R.id.AppView).setOnClickListener(handler);
当我点击“AppView”按钮时,布局会发生变化,但是当我点击“DownloadView”按钮时,没有任何反应。
This link说我必须开始一项新活动。
但我不知道如何使用意图启动新活动的代码,是否会添加新文件?
修改: 我有关于新活动的代码:
package com.example.engagiasync;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
public class AppView extends Activity implements OnClickListener{
@Override
public void onCreate(Bundle savedInstanceState){
setContentView(R.layout.app);
TextView tv = (TextView) this.findViewById(R.id.thetext);
tv.setText("App View yo!?\n");
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
}
但它不起作用,强制关闭,logcat说:
答案 0 :(得分:20)
Button btnDownload = (Button) findViewById(R.id.DownloadView);
Button btnApp = (Button) findViewById(R.id.AppView);
btnDownload.setOnClickListener(handler);
btnApp.setOnClickListener(handler);
View.OnClickListener handler = new View.OnClickListener(){
public void onClick(View v) {
if(v==btnDownload){
// doStuff
Intent intentMain = new Intent(CurrentActivity.this ,
SecondActivity.class);
CurrentActivity.this.startActivity(intentMain);
Log.i("Content "," Main layout ");
}
if(v==btnApp){
// doStuff
Intent intentApp = new Intent(CurrentActivity.this,
ThirdActivity.class);
CurrentActivity.this.startActivity(intentApp);
Log.i("Content "," App layout ");
}
}
};
注意:然后您应该在清单.xml文件中声明所有活动,如下所示:
<activity android:name=".SecondActivity" ></activity>
<activity android:name=".ThirdActivity" ></activity>
编辑:更新代码的这一部分:):
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);// Add THIS LINE
setContentView(R.layout.app);
TextView tv = (TextView) this.findViewById(R.id.thetext);
tv.setText("App View yo!?\n");
}
注意:检查此(Broken link) Tutorial About How To Switch Between Activities。
答案 1 :(得分:10)
我会在布局中添加android:onClick
,然后更改活动中的布局。
所以在布局中
<ImageView
(Other things like source etc.)
android:onClick="changelayout"
/>
然后在活动中添加以下内容:
public void changelayout(View view){
setContentView(R.layout.second_layout);
}
答案 2 :(得分:2)
我认为你要做的事情应该是多项活动。如果您正在学习Android,那么理解活动是您必须要解决的问题。尝试用一个Activity编写一个完整的应用程序最终会变得更加困难。阅读this article让自己开始,然后你应该得到更像这样的东西:
View.OnClickListener handler = new View.OnClickListener(){
public void onClick(View v) {
switch (v.getId()) {
case R.id.DownloadView:
// doStuff
startActivity(new Intent(ThisActivity.this, DownloadActivity.class));
break;
case R.id.AppView:
// doStuff
startActivity(new Intent(ThisActivity.this, AppActivity.class));
break;
}
}
};
findViewById(R.id.DownloadView).setOnClickListener(handler);
findViewById(R.id.AppView).setOnClickListener(handler);
答案 3 :(得分:2)
我知道我迟到了,但到底是什么。
我几乎和Kris完全相同的代码,只使用一个Activity但有两个不同的布局/视图,我想随意切换布局。
作为测试,我添加了2个菜单选项,每个选项都会切换视图:
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.item1:
setContentView(R.layout.main);
return true;
case R.id.item2:
setContentView(R.layout.alternate);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
注意,我有一个Activity类。这非常有效。所以我不知道为什么人们建议使用不同的活动/意图。也许有人可以解释为什么我的代码有效并且Kris没有。
答案 4 :(得分:2)
您想在按钮单击时在运行时更改布局。但这是不可能的,正如上面所说,你需要重新启动活动。当您计划根据用户的选择更改主题时,您会遇到类似的问题,但它不会在运行时反映出来。您必须重新开始活动。
答案 5 :(得分:1)
logcat显示错误,您应该调用super.onCreate(savedInstanceState)
:
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//... your code
}
答案 6 :(得分:0)
首先,我建议在您的交换机的每个案例中放入一个日志,以确保您的代码被调用。
然后我会检查布局实际上是不同的。
答案 7 :(得分:0)
这很简单,只需这样做:
t4.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
launchQuiz2(); // TODO Auto-generated method stub
}
private void launchQuiz2() {
Intent i = new Intent(MainActivity.this, Quiz2.class);
startActivity(i);
// TODO Auto-generated method stub
}
});