0

私は初心者であり、これが私の最初の投稿です。私の問題が明確であることを願っています。誰かが私を助けてくれることを本当に願っています.

まず第一に、私はいくつかのボタンで簡単なページを作成しようとしています.それらのボタンの1つは私をWebページにリダイレクトする必要があります. しかし、私の問題は、リダイレクトボタンを作成する方法を知らなかったことでしたので、これを見てみましょう: AndroidアプリケーションでボタンがクリックされたときにWebサイトを開く方法は?

私がフォローしていたとき、私は真剣に多くの問題を抱えていました。私はそれらをどこに置くべきかさえ知りませんでした。しかし、Androidサイトでグーグルして読んだ後、私はこれを行うことができました:)

とにかく、私はまだ小さな問題を抱えていました.この行は正確にそれを与えました.

public class LinkButtons extends Activity {

私はこれを次のように変更しました:

class LinkButtons extends Activity {

行って良かったけど本当に良かったのか不安…

XMLでボタンを作成しましたが、警告が表示されます(ハードコードする必要があるかどうかについて)。テキスト付きのボタンがまだ表示されていたので、これを無視しました。

プログラムを起動すると正常に動作しますが、このボタンをタッチすると (Web ページにリダイレクトする必要があるため)、プログラムが数秒間停止して終了し、「プロセス (プログラム) が停止しました」と表示されます。

そしてLogcatで私はこれを見ます:

11-07 00:22:06.580: D/ActivityThread(30706): setTargetHeapUtilization:0.25
11-07 00:22:06.580: D/ActivityThread(30706): setTargetHeapIdealFree:8388608
11-07 00:22:06.580: D/ActivityThread(30706): setTargetHeapConcurrentStart:2097152
11-07 00:22:06.780: D/libEGL(30706): loaded /system/lib/egl/libEGL_adreno200.so
11-07 00:22:06.800: D/libEGL(30706): loaded /system/lib/egl/libGLESv1_CM_adreno200.so
11-07 00:22:06.810: D/libEGL(30706): loaded /system/lib/egl/libGLESv2_adreno200.so
11-07 00:22:06.820: I/Adreno200-EGL(30706): <qeglDrvAPI_eglInitialize:299>: EGL 1.4 QUALCOMM build: AU_LINUX_ANDROID_JB_REL_2.0.3.1_RB1.04.01.01.45.000_msm8625_JB_REL_2.0.3.1_Merge_release_AU (Merge)
11-07 00:22:06.820: I/Adreno200-EGL(30706): Build Date: 03/28/13 Thu
11-07 00:22:06.820: I/Adreno200-EGL(30706): Local Branch: 
11-07 00:22:06.820: I/Adreno200-EGL(30706): Remote Branch: m/jb_rel_2.0.3.1
11-07 00:22:06.820: I/Adreno200-EGL(30706): Local Patches: NONE
11-07 00:22:06.820: I/Adreno200-EGL(30706): Reconstruct Branch: NOTHING
11-07 00:22:06.850: D/OpenGLRenderer(30706): Enabling debug mode 0
11-07 00:22:16.850: D/AndroidRuntime(30706): Shutting down VM
11-07 00:22:16.850: W/dalvikvm(30706): threadid=1: thread exiting with uncaught exception (group=0x41eb6438)
11-07 00:22:16.850: E/AndroidRuntime(30706): FATAL EXCEPTION: main
11-07 00:22:16.850: E/AndroidRuntime(30706): java.lang.IllegalStateException: Could not find a method goToSu(View) in the activity class com.example.[need to remove this part, sorry].FullscreenActivity for onClick handler on view class android.widget.Button with id 'button_su'
11-07 00:22:16.850: E/AndroidRuntime(30706):    at android.view.View$1.onClick(View.java:3667)
11-07 00:22:16.850: E/AndroidRuntime(30706):    at android.view.View.performClick(View.java:4191)
11-07 00:22:16.850: E/AndroidRuntime(30706):    at android.view.View$PerformClick.run(View.java:17229)
11-07 00:22:16.850: E/AndroidRuntime(30706):    at android.os.Handler.handleCallback(Handler.java:615)
11-07 00:22:16.850: E/AndroidRuntime(30706):    at android.os.Handler.dispatchMessage(Handler.java:92)
11-07 00:22:16.850: E/AndroidRuntime(30706):    at android.os.Looper.loop(Looper.java:137)
11-07 00:22:16.850: E/AndroidRuntime(30706):    at android.app.ActivityThread.main(ActivityThread.java:4963)
11-07 00:22:16.850: E/AndroidRuntime(30706):    at java.lang.reflect.Method.invokeNative(Native Method)
11-07 00:22:16.850: E/AndroidRuntime(30706):    at java.lang.reflect.Method.invoke(Method.java:511)
11-07 00:22:16.850: E/AndroidRuntime(30706):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
11-07 00:22:16.850: E/AndroidRuntime(30706):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
11-07 00:22:16.850: E/AndroidRuntime(30706):    at dalvik.system.NativeStart.main(Native Method)
11-07 00:22:16.850: E/AndroidRuntime(30706): Caused by: java.lang.NoSuchMethodException: goToSu [class android.view.View]
11-07 00:22:16.850: E/AndroidRuntime(30706):    at java.lang.Class.getConstructorOrMethod(Class.java:460)
11-07 00:22:16.850: E/AndroidRuntime(30706):    at java.lang.Class.getMethod(Class.java:915)
11-07 00:22:16.850: E/AndroidRuntime(30706):    at android.view.View$1.onClick(View.java:3660)
11-07 00:22:16.850: E/AndroidRuntime(30706):    ... 11 more

私は今どうすればいい?またはどうすればこれを修正できますか?

返信をいただければ幸いです。

PS: .java コードを現在のコードに追加しましたが、これで問題ありませんか? または、別の .java ファイルを作成する必要がありましたか?

PPS:私が言ったように、私は非常に初心者です。高度な話をするつもりなら、説明してください...ありがとう、

編集:

コード、Java、および XML は次のとおりです。

Javaの上に;

    package com.example.[removed];
import com.example.[removed].util.SystemUiHider;
import android.annotation.TargetApi;
import android.app.Activity;
import android.os.Build;
import android.os.Bundle;
import android.content.Intent;
import android.net.Uri;
import android.os.Handler;
import android.view.MotionEvent;
import android.view.View;

それから

     * The instance of the {@link SystemUiHider} for this activity.
 */
private SystemUiHider mSystemUiHider;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_fullscreen);

    final View controlsView = findViewById(R.id.fullscreen_content_controls);
    final View contentView = findViewById(R.id.fullscreen_content);

    // Set up an instance of SystemUiHider to control the system UI for
    // this activity.
    mSystemUiHider = SystemUiHider.getInstance(this, contentView, HIDER_FLAGS);
    mSystemUiHider.setup();
    mSystemUiHider
            .setOnVisibilityChangeListener(new SystemUiHider.OnVisibilityChangeListener() {
                // Cached values.
                int mControlsHeight;
                int mShortAnimTime;

                class LinkButtons extends Activity {

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

                    public void goToSo (View view) {
                        goToUrl ( "https://stackoverflow.com/");
                    }

                    public void goToSu (View view) {
                        goToUrl ( "http://superuser.com/");
                    }

                    private void goToUrl (String url) {
                        Uri uriUrl = Uri.parse(url);
                        Intent launchBrowser = new Intent(Intent.ACTION_VIEW, uriUrl);
                        startActivity(launchBrowser);
                    }
                }

                @Override
                @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
                public void onVisibilityChange(boolean visible) {
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {

次にXML

            <Button
            android:id="@+id/button_so"
            style="?buttonBarButtonStyle"
            android:layout_width="104dp"
            android:layout_height="wrap_content"
            android:autoLink="web"
            android:clickable="true"
            android:cursorVisible="true"
            android:linksClickable="true"
            android:onClick="goToSo"

            android:text="StackOverflow" />

        <Button
            android:id="@+id/button_su"
            style="?buttonBarButtonStyle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:autoLink="web"
            android:clickable="true"
            android:onClick="goToSu"
            android:text="SuperUser" >
        </Button>
    </LinearLayout>

</FrameLayout>
4

2 に答える 2

0

xml で宣言したようですが、onClick()問題ありません。Buttonしかし、で宣言したメソッドがありませんandroid:onClick="goToSu"。このメソッドを に追加しますActivity

public void goTuSu(View v)
{
     // your code
}

あなたが投稿したリンクでは、あなたは明らかにその答えにこの方法を持っているアラン・パネティエによる答えに従っていました

public void goToSu (View view) {
    goToUrl ( "http://superuser.com/");
}

編集

また、リンク先の回答からこの方法があります

 private void goToUrl (String url) {
    Uri uriUrl = Uri.parse(url);
    Intent launchBrowser = new Intent(Intent.ACTION_VIEW, uriUrl);
    startActivity(launchBrowser);
}

から呼び出されgoToSu()ます。goToUrl()カスタム メソッドです... Android フレームワークの一部ではありません。

Button DocsonClick()で xml を介して実装する方法を確認できます。

于 2013-11-07T00:04:21.100 に答える
0

wtsang02 の答えは良いですが、少し不足しています。

レイアウトの xml で android:onclick 属性を使用しないでください。維持するのは悪夢です。

アクティビティの onCreate メソッドで行うだけです。

onCreateで...

ボタン mButton = (ボタン) findViewById(R.id.myButton); mButtonsetOnClickListener(新しいOnClickListener(){

  @Override
  public void onClick(View v) {
  // TODO Auto-generated method stub

  }});
于 2013-11-07T00:05:25.043 に答える