2012-07-27 54 views
-1

我不明白爲什麼這2個按鈕不起作用,我有一個佈局文件,當用戶在我的應用程序中選擇某個主題時創建。有了它的佈局,它有一個webview它有2個按鈕goback和goforward。佈局與Web視圖上的按鈕

<Button 
    android:id="@+id/button1" 
    android:layout_width="wrap_content" 
    android:text="Back" 
    android:layout_alignParentLeft="true" 
    android:layout_height="wrap_content" 
    android:background="@drawable/button_blue" 
    style="@style/ButtonText"> 
    </Button> 

    <Button 
    android:id="@+id/button2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:background="@drawable/button_blue" 
    style="@style/ButtonText" 
    android:text="Forward"> 
</Button> 


    <WebView 
    android:id="@+id/webview01" 
    android:layout_width="fill_parent" 
    android:layout_height="0dp" 
    android:layout_weight="1.12" > 

這是不是整個佈局文件,但這裏的東西,我跟在web視圖工作位和2個按鈕,現在我的主要活動中,這裏是我按鈕的代碼。具有

 @Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    if (Prefs.theme.equals("Theme1")) 
     setContentView(R.layout.main); 
    else if (Prefs.theme.equals("Theme2")) 
     setContentView(R.layout.main2); 
    else if (Prefs.theme.equals("Theme3")) 
     setContentView(R.layout.main3); 
    else setContentView(R.layout.main); 



    btnForward=(Button) findViewById (R.id.button1); 
    btnBackward=(Button) findViewById (R.id.button2); 
    btnForward.setOnClickListener(this); 
    btnBackward.setOnClickListener(this); 


    // more code within on create ..... 

// Later in the code 

public void onClick(View v) { 

    switch(v.getId()) { 

     case R.id.button1: 
      WebViewClientDemoActivity.web.goBack(); 
      break; 

     case R.id.button2: 
      WebViewClientDemoActivity.web.goForward(); 
      break; 
    } 

//

我問題IM是默認它加載main.xml中不main3(這是爲2個按鈕是)

logcat的錯誤

07-27 16:00:34.802: E/AndroidRuntime(547): FATAL EXCEPTION: main 
    07-27 16:00:34.802: E/AndroidRuntime(547): java.lang.RuntimeException: Unable to start activity  ComponentInfo{com.jaisonbrooks.enlighten/com.jaisonbrooks.enlighten.WebViewClientDemoActivity}: java.lang.NullPointerException 
    07-27 16:00:34.802: E/AndroidRuntime(547): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) 
    07-27 16:00:34.802: E/AndroidRuntime(547): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
    07-27 16:00:34.802: E/AndroidRuntime(547): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
    07-27 16:00:34.802: E/AndroidRuntime(547): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
    07-27 16:00:34.802: E/AndroidRuntime(547): at android.os.Handler.dispatchMessage(Handler.java:99) 
    07-27 16:00:34.802: E/AndroidRuntime(547): at android.os.Looper.loop(Looper.java:123) 
    07-27 16:00:34.802: E/AndroidRuntime(547): at android.app.ActivityThread.main(ActivityThread.java:3683) 
    07-27 16:00:34.802: E/AndroidRuntime(547): at java.lang.reflect.Method.invokeNative(Native Method) 
    07-27 16:00:34.802: E/AndroidRuntime(547): at java.lang.reflect.Method.invoke(Method.java:507) 
    07-27 16:00:34.802: E/AndroidRuntime(547): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
    07-27 16:00:34.802: E/AndroidRuntime(547): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
    07-27 16:00:34.802: E/AndroidRuntime(547): at dalvik.system.NativeStart.main(Native Method) 
    07-27 16:00:34.802: E/AndroidRuntime(547): Caused by: java.lang.NullPointerException 
    07-27 16:00:34.802: E/AndroidRuntime(547): at com.jaisonbrooks.enlighten.WebViewClientDemoActivity.onCreate(WebViewClientDemoActivity.java:75) 
    07-27 16:00:34.802: E/AndroidRuntime(547): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
    07-27 16:00:34.802: E/AndroidRuntime(547): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
    07-27 16:00:34.802: E/AndroidRuntime(547): ... 11 more 
+0

你覆蓋的方法的onClick(視圖v)??? (而不是onButtonClicked())。第二件事,你是否爲你的按鈕設置了onClickListener? – Houcine 2012-07-27 15:24:24

+0

我只做了上面的代碼,所以使用你的例子會看起來像這樣:@Overide public void onClick(View v){ switch(v.getId()){ case R.id.button1: WebViewClientDemoActivity.web.goBack(); 休息;案例R.id.button2: WebViewClientDemoActivity.web.goForward(); 休息; }' – 2012-07-27 15:32:42

+0

是的,它和它之前,你應該onClickListeners像你這樣的按鈕:btnForward.setOnClickListener(this); – Houcine 2012-07-27 15:37:15

回答

1

首先在onCreate方法通過IDS發現你的按鈕:

public class YourActivity extends Activity implements OnClickListener { 
Button btnForward; 
Button btnBackward; 

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     btnForward=(Button) findViewById (R.id.btnForward); 
     btnBackward=(Button) findViewById (R.id.btnBackward); 

     //set listeners 
     btnForward.setOnClickListener(this); 
     btnBackward.setOnClickListener(this); 

     // your code here .... 
    } 

@Override 
public void onClick(View v) { 
    switch(v.getId()) { 

     case R.id.btnBackward: 
      WebViewClientDemoActivity.web.goBack(); 
      break; 
     case R.id.btnForward: 
      WebViewClientDemoActivity.web.goForward(); 
      break; 
    } 
} 

}

+0

好的,我已經在我的代碼中實現了這個,順便說一句,謝謝你幫助我,唯一的問題是我的代碼區裏面有我的所有其他代碼,'R.id.btnForward'說我需要插入一個}然而,在按鈕點擊的東西,我有我的webview的東西,並低於該警報對話框。所以我想我有問題在哪裏插入一個}而不是把我的所有代碼都寫入錯誤。 – 2012-07-27 15:58:15

+0

其實我已經修復了它,我正在嘗試代碼 – 2012-07-27 16:00:05

+0

然而,在執行上面的代碼之後,我的應用程序強行關閉了。我已經更新了上面的logcat – 2012-07-27 16:02:07

0
<Button 
android:id="@+id/button1" 
android:layout_width="wrap_content" 
android:text="Back" 
android:layout_alignParentLeft="true" 
android:layout_height="wrap_content" 
android:background="@drawable/button_blue" 
style="@style/ButtonText" /> 

<Button 
android:id="@+id/button2" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_alignParentRight="true" 
android:background="@drawable/button_blue" 
style="@style/ButtonText" 
android:text="Forward" /> 

試試這個。

後來在Java代碼中,這樣做

Button btnNext = (Button) findViewById(R.id.button2); 
btnNext.setOnClickListener(new OnClickListener() 
{ 
     @Override 
    public void onClick(View v) 
    { 
     WebViewClientDemoActivity.web.goForward(); 
    } 
}); 


Button btnBack = (Button) findViewById(R.id.button1); 
btnNext.setOnClickListener(new OnClickListener() 
{ 
     @Override 
    public void onClick(View v) 
    { 
     WebViewClientDemoActivity.web.goBack(); 
    } 
}); 
+0

我試過了,仍然沒有工作,沒有強制關閉是錯誤,只是當按鈕被點擊時什麼也沒有發生。 – 2012-07-27 15:36:41

+0

哦,我沒有理解你的問題downvoted。整齊。 lemme編輯並查看我是否可以從中獲得一些業力。 – Shark 2012-07-27 15:41:06

+0

我已經試過了你的代碼,並且要麼插入一個額外的'}'來關閉我的主要活動,我仍然在自己的onresop上,等等,如果沒問題,我會得到第一部分的錯誤'Button btnNext =(Button)'等,唯一的修復就是刪除。感謝您的幫助 – 2012-07-27 15:51:16

1

它應該工作。確保你沒有相同的兩個按鈕@id
這是一個常見的問題,當你從一個乘你的按鈕。 (複製/粘貼)

+0

它們都是不同的,因爲你可以在代碼中看到,我沒有setOnclickListner設置我是否需要這個,如果我在哪裏執行一個實現它? – 2012-07-27 15:37:55