1

我不知道爲什麼我的代碼無法正常工作。我正在關注如何向按鈕添加偵聽器的教程,但我的應用程序甚至不再運行。我敢肯定這是一個愚蠢的錯誤,但我被困在了超過5個小時!這裏是我的代碼:不幸的是,當我使用onClickListener作爲按鈕時,應用程序已停止

MainActivity.java

package com.example.simplebuttons; 

import android.support.v7.app.ActionBarActivity; 
import android.support.v7.app.ActionBar; 
import android.support.v4.app.Fragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.os.Build; 

import android.app.Activity; 
import android.content.Intent; 
import android.widget.Button; 
import android.widget.Toast; 
import android.view.View.OnClickListener; 



public class MainActivity extends ActionBarActivity { 


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

     //System.out.print("HELLO"); 
     addListenerOnButton(); 

     if (savedInstanceState == null) { 
      getSupportFragmentManager().beginTransaction() 
        .add(R.id.container, new PlaceholderFragment()) 
        .commit(); 
     } 
    } 

    public void addListenerOnButton() { 
     Button b1 = (Button)findViewById(R.id.buttonGoStraight); 
     b1.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Toast.makeText(getApplicationContext(), "Button is clicked", Toast.LENGTH_LONG).show(); 

      } 
     }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    /** 
    * A placeholder fragment containing a simple view. 
    */ 
    public static class PlaceholderFragment extends Fragment { 

     public PlaceholderFragment() { 
     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
      View rootView = inflater.inflate(R.layout.fragment_main, container, false); 
      return rootView; 
     } 
    } 

} 

fragment_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@android:color/black"> 

    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="This is a simple button app. \r\n \r\nCode Here \r\n" 
     android:padding="10dp" 
     android:textColor="#FFFFFF"/> 

    <Button 
     android:id="@+id/buttonGoStraight" 
     android:layout_width="125dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:text="@string/go_straight"/> 

    <Button 
     android:id="@+id/buttonTurnLeft" 
     android:layout_width="125dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:text="@string/turn_left"/> 

    <Button 
     android:id="@+id/buttonTurnRight" 
     android:layout_width="125dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:text="@string/turn_right" /> 

    <Button 
     android:id="@+id/buttonGoBack" 
     android:layout_width="125dp" 
     android:layout_height="wrap_content" 
     android:text="@string/go_back" 
     android:layout_gravity="center_horizontal"/> 

    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="\n"/> 

    <Button 
     android:id="@+id/buttonGoBack" 
     android:layout_width="125dp" 
     android:layout_height="wrap_content" 
     android:text="@string/destination" 
     android:gravity="center" 
     android:layout_gravity="center_horizontal"/> 
</LinearLayout> 

activity_main.xml中

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.example.simplebuttons.MainActivity" 
    tools:ignore="MergeRootFrame" /> 

這是logcat: enter image description here

有沒有人有任何想法如何解決這個問題?

+0

你main_activity.xml是什麼樣的?你的按鈕在片段中,但你正在嘗試在activity_main.xml中找到它們 – jiduvah 2015-02-24 16:35:59

回答

1

由於按鍵採用buttonGoStraight ID是內部fragment_main佈局是PlaceholderFragment片段佈局這麼叫addListenerOnButtononCreateView和使用rootView訪問的觀點:

Button b1 = (Button)rootView.findViewById(R.id.buttonGoStraight); 
+0

現在我在MainActivity.java中得到一個錯誤,其中包含'Toast' – Alias 2015-02-24 16:48:13

+0

@Alias:使用'getActivity()'而不是'getApplicationContext() '作爲'makeText'中的第一個參數 – 2015-02-24 16:50:29

+0

@Alias:同時在'PlaceholderFragment'類中移動'addListenerOnButton'方法 – 2015-02-24 16:52:08

1

你試圖findViewById上R.layout.activity_main,但您的按鈕位於片段的佈局中...您應該在佔位符片段中的onCreateView中設置按鈕的偵聽器

+0

現在我收到MainActivity.java中的Toast錯誤 – Alias 2015-02-24 16:45:42

+0

它說'不能從類型ContextWrapper'的非靜態方法getApplicationContext()靜態引用 – Alias 2015-02-24 16:49:17

+0

從那裏調用? – JHH 2015-02-24 17:18:49

0

您在0123之前調用findViewById 添加包含此元素的片段。在片段初始化後移動偵聽器設置代碼。

+0

現在,我收到MainActivity.java中的Toast錯誤 – Alias 2015-02-24 16:48:43

相關問題