ボタンをクリックしてレイアウトを選択するには、次のコードに従う必要があります。
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」ボタンをクリックしても何も起こりません。
このリンク は、新しいアクティビティを開始する必要があることを示しています。
しかし、新しいアクティビティを開始する目的でコードを使用する方法がわかりません。新しいファイルが追加されますか?
編集:新しいアクティビティにコードがあります:
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は言います:
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>
EDIT:コードのこの部分を更新します:):
@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");
}
NB:これを確認してください (壊れたリンク)アクティビティを切り替える方法についてのチュートリアル 。
レイアウトにAndroid:onClick
を追加してから、アクティビティのレイアウトを変更します。
レイアウトで
<ImageView
(Other things like source etc.)
Android:onClick="changelayout"
/>
次に、アクティビティに次を追加します。
public void changelayout(View view){
setContentView(R.layout.second_layout);
}
ボタンのクリック時に実行時にレイアウトを変更したかった。しかし、それは不可能であり、上で正しく述べられているように、アクティビティを再起動する必要があります。ユーザーの選択に基づいてテーマを変更しようと計画しているときに、同様の問題に遭遇しますが、ランタイムには反映されません。アクティビティを再起動する必要があります。
私はこれに遅く来ていることを知っていますが、一体何でしょう。
Krisとほぼ同じコードを使用しています。1つのアクティビティのみを使用しますが、2つの異なるレイアウト/ビューを使用しており、レイアウトを自由に切り替えたいと思います。
テストとして、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);
}
}
注、1つのActivityクラスがあります。これは完全に機能します。だから、なぜ人々がさまざまなアクティビティ/インテントの使用を提案しているのか分かりません。たぶん誰かが私のコードが機能し、クリスが機能しなかった理由を説明できるでしょう。
あなたがしようとしていることは、複数のアクティビティで行うべきだと思います。 Androidを学習している場合、アクティビティを理解することは取り組む必要があるものです。 1つのアクティビティだけでアプリ全体を作成しようとすると、はるかに困難になります。 この記事 を読んで、始めてみてください。そうすれば、次のような結果になります。
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);
Logcatはエラーを表示します。super.onCreate(savedInstanceState)
を呼び出す必要があります:
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//... your code
}
それは非常に簡単です、ただこれをしてください:
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
}
});
まず、スイッチの各ケースにログを入れて、コードが確実に呼び出されるようにすることをお勧めします。
次に、レイアウトが実際に異なることを確認します。