2015-10-26 39 views
-2

問題是MainActivity從帶有layout.xml的setContentView開始。我們可以在MainActivity類中的佈局和代碼中添加按鈕或任何東西,但是當我嘗試在同一個Activity中編寫另一個佈局的按鈕時,應用程序強制停止。怎麼了 ?設置其他佈局的按鈕時出現問題

+0

請顯示您的代碼 –

+0

發佈您的堆棧跟蹤。 –

+0

歡迎來到StackOverflow。請閱讀並遵守幫助文檔中的發佈準則。 [MCVE](http://stackoverflow.com/help/mcve)適用於此處。在您發佈代碼並準確描述問題之前,我們無法爲您提供幫助。 – Prune

回答

0

請寄給我您​​的活動 什麼問題的文字?

你可以寫下面的代碼到另一個活動

button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       startActivity(new Intent(getApplicationContext(),nameActivity.class)); 
      } 
     }); 

哪裏按鈕是你的按鈕

的名稱見你的XML文件可是沒有任何錯誤

+0

是的兄弟去其他活動是好的。我正在討論來自同一活動中另一個佈局的編碼按鈕。 –

+0

什麼問題的文字? –

+0

我不能幫你,如果你不給我發一個問題的文本 –

0

你得到一個因爲您試圖在未充氣時訪問佈局,因此崩潰。換句話說,你必須在一個Activity上調用setContentView(),或者在Fragment上調用inflater.inflate()來實例化視圖並使元素可以被操作。所以,如果你想添加按鈕到另一個活動,你需要調用它的onCreate()setContentView(),然後才能添加按鈕。

編輯:在響應於留言...

爲了訪問/操縱/修改元件在運行時的佈局,他們必須首先被實例化,當視圖被充氣恰好。所以,一個按鈕在運行時添加一個活動,你會調用setContentView()這樣做後,它在onCreate()方法:

請記住,這是你的第二個活動的onCreate() ......不是你的主要活動。因此,您的主要活動將啓動此活動,然後該按鈕將在第二個活動的設置過程中創建。

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.your_second_activity; 

    Button button = new Button(this); 
    button.setText("Your New Button"); 

    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Log.d("NEW BUTTON", "I just clicked my new button!"); 
     } 
    }); 

    RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.layout_in_your_second_activity); 
    relativeLayout.addView(button); 
} 

如果您使用的是片段,以顯示您的用戶界面,直到你誇大你的佈局,這發生在onCreateView()方法,你不能訪問你的UI元素。所以,你會做你的代碼片段是這樣的:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.your_fragment_layout, container, false); 
    RelativeLayout relativeLayout = (RelativeLayout) view.findViewById(R.id.container_layout_that_holds_button); 

    //You would get your context from an onAttach() Override 
    Button button = new Button(context); 
    button.setText("Your New Button"); 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Log.d("NEW BUTTON", "I just clicked my new button!"); 
     } 
    }); 

    relativeLayout.addView(button); 

    return view; 
} 

你很可能得到一個NullPointerException當您嘗試在創建之前,他們來操縱你的佈局。請記住,即使您有一個內部指定了佈局的XML文件,這些元素的實際對象也只有在系統確定需要它們時纔會創建,當您真正嘗試顯示該視圖時會發生這種情況。

+0

你可以舉一個例子做什麼? –

+0

@YasinArefin - 查看我上面的編輯。 – NoChinDeluxe