簡體   English   中英

android:如何在按鈕點擊時更改布局?

[英]android: how to change layout on button click?

我必須按照代碼選擇按鈕點擊時的布局。

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>

編輯:更新這段代碼:):

@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");
}

注意:檢查此(斷開鏈接)關於如何在活動之間切換的教程

我會在布局中添加一個android:onClick ,然后更改活動中的布局。

所以在布局中

<ImageView
(Other things like source etc.)
android:onClick="changelayout"
/>

然后在活動中添加以下內容:

public void changelayout(View view){
    setContentView(R.layout.second_layout);
}

您希望在按鈕單擊時在運行時更改布局。 但這是不可能的,正如上面所說,你需要重新啟動活動。 當您計划根據用戶的選擇更改主題時,您會遇到類似的問題,但它不會在運行時反映出來。 您必須重新啟動活動。

我認為你要做的事情應該是多項活動。 如果您正在學習Android,那么理解活動是您必須要解決的問題。 嘗試用一個Activity編寫一個完整的應用程序最終會變得更加困難。 閱讀這篇文章 ,讓自己開始,然后你應該得到更像這樣的東西:

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);

我知道我遲到了,但到底是什么。

我有幾乎與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沒有。

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

        }

    });

首先,我建議在每個交換機的情況下放一個Log來確保你的代碼被調用。

然后我會檢查布局實際上是不同的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM