【问题标题】:Buttons on Layout with Webview带有 Webview 的布局上的按钮
【发布时间】:2012-07-27 15:20:42
【问题描述】:

我无法弄清楚为什么这 2 个按钮不起作用,我有一个布局文件,当用户在我的应用程序中选择某个主题时会在其中创建。有了布局,它有一个 web 视图,它有 2 个按钮可以后退和前进。

   <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" >

这不是整个布局文件,但这是我正在为 webview 和 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;
    }

//

我遇到的问题是默认情况下它加载 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

【问题讨论】:

  • 你是否重写了 onClick(View v) 方法??? (不是 onButtonClicked() )。第二件事,你为你的按钮设置了 onClickListener 吗?
  • 我只做了上面的代码,所以使用你的例子会是这样的@Overide public void onClick(View v) { switch(v.getId()) { case R.id.button1: WebViewClientDemoActivity.web.goBack(); break; case R.id.button2: WebViewClientDemoActivity.web.goForward(); break; }
  • 是的,就是这样,在此之前,您应该将 onClickListeners 设置为您的按钮,如下所示:btnForward.setOnClickListener(this);
  • 好吧,我正在研究它,它看起来如何,你能更新我的代码吗,如果这不是太多要求的话。
  • 看我的回答,我会给你一个如何实现它的例子

标签: java android layout button click


【解决方案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;
    }
}

}

【讨论】:

  • 好吧,我已经在我的代码中实现了这个,顺便说一句,谢谢你帮助我,我唯一遇到的问题是在我的代码区域内,我有我的所有其他代码,R.id.btnForward 说我需要插入一个}但是在按钮下单击东西我有我的webview东西,下面是一个警报对话框。所以我想我在插入 } 的位置时遇到了问题,而不会将我的所有代码都抛出错误。
  • 但是,在我实现了上述代码之后,我的应用程序已强制关闭。我已经更新了上面的 logcat
  • 我已经用你的实现更新了我的源代码。你能看看吗
  • 您遇到的错误在 onCreate() 方法中,在第 75 行 (WebViewClientDemoActivity.java:75) 中,您能给我们第 75 行的代码行吗?我认为变量 Prefs 是 null ,你在哪里实例化它?
  • 这段代码确实解决了这个问题,我的主题是关于导致代码不起作用的应用程序
【解决方案2】:

它应该工作。确保您没有 2 个具有相同 @id 的按钮。
当您将按钮与一个相乘时,这是一个常见问题。 (复制/粘贴)

【讨论】:

  • 它们都不同,正如您在代码中看到的那样,我没有 setOnclickListner 设置,我需要它吗?如果我在哪里实现它?
【解决方案3】:
<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();
    }
 });

【讨论】:

  • 我试过了还是不行,没有强制关闭是错误,只是当按钮被点击时没有任何反应。
  • 哦,我因为不理解您的问题而被否决了。整洁的。让我编辑,看看我能不能从中得到一些因果报应。
  • 我试过你的代码,要么我必须插入一个额外的} 来关闭我的主要活动,我仍然是我的onresume onstop,等等,如果没问题,我明白了第一部分错误Button btnNext = (Button) 等,它说的唯一修复是删除。感谢您的帮助
  • 你能发布错误吗?不知何故,我猜你需要导入 android.widget.Button;如果在 Eclipse 中尝试按 ctrl+o 并查看是否可以修复它。我想到的另一个错误是 R.id.button1 不能被引用,在这种情况下你需要清理你的项目并重建,以便重新生成 R 类并包含正确的 id。
  • 所以我尝试了你的代码,我没有在我的活动中放置它,
猜你喜欢
  • 2011-01-31
  • 1970-01-01
  • 1970-01-01
  • 2011-01-23
  • 2011-02-26
  • 1970-01-01
  • 1970-01-01
  • 2010-12-13
  • 2016-05-11
相关资源
最近更新 更多