java - 布局 fragment 中的按钮

标签 java android android-layout

<分区>

我目前正在使用 ViewPager 在不同的 Layouts 中滑动。

到目前为止我有两个,这两个 LayoutsButtons

我有一个主布局和两个加载到主布局中的布局。

<Button
        android:layout_width="120dp"
        android:layout_height="120dp"
        android:text="@string/when"
        android:id="@+id/when_button"
        style="@style/ShadowText"
        android:background="@drawable/button_background_states"
        android:gravity="center"
        android:padding="10dp"
        android:adjustViewBounds="true"
        android:textColor="@color/text"
        android:textSize="20sp"
        android:textStyle="bold"
        android:layout_marginBottom="20dp"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true" />

这是我的按钮之一。但我希望每个布局上的每个按钮都被点击。当点击按钮播放声音时:

final Button button = (Button) findViewById(R.id.when_button); button.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        MediaPlayer mp = MediaPlayer.create(getBaseContext(),
                R.raw.when);
        mp.start();
    } });

这曾经在我的 onCreate 中,但现在它使我的应用程序崩溃。我是一个 super 新手,我只是想不出一种方法来在这些不同的按钮上设置不同的事件。

Process: com.phakeapps.mladmerindzhey.app, PID: 18970
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.phakeapps.mladmerindzhey.app/com.phakeapps.mladmerindzhey.app.MainActivity}: java.lang.NullPointerException
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
            at android.app.ActivityThread.access$800(ActivityThread.java:135)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5001)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NullPointerException
            at com.phakeapps.mladmerindzhey.app.MainActivity.onCreate(MainActivity.java:24)
            at android.app.Activity.performCreate(Activity.java:5231)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
            at android.app.ActivityThread.access$800(ActivityThread.java:135)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5001)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
            at dalvik.system.NativeStart.main(Native Method)

我正在关注 this tutorial

我确实认为问题在于按钮位于不同的文件中,但我不确定在更改布局时如何找到它们。

最佳答案

例如,如果您有一个包含多个 Button 的布局,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <Button
        android:id="@+id/btnOne"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/btnTwo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</RelativeLayout>

您可以为每个 Button 分配不同的 ID,在本例中,第一个 Button 的 ID 为 R.id.btnOne,第二个 ButtonR.id.btnTwo

您可以在代码中引用这些Buttons,方法是使用您要查找的View 的id 调用findViewById()。因此,要获得第一个 Button,您必须这样做:

Button btnOne = (Button) findViewById(R.id.btnOne);

第二个 Button 的 ID 为 R.id.btnTwo 可以像这样检索:

Button btnTwo = (Button) findViewById(R.id.btnTwo);

如果你有对每个 Button 的引用,你可以为每个 Button 分配一个不同的点击监听器:

Button btnOne = (Button) findViewById(R.id.btnOne);        
btnOne.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        foo();
    }
});


Button btnTwo = (Button) findViewById(R.id.btnTwo);
btnTwo.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        bar();
    }
});

关于java - 布局 fragment 中的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24675092/

相关文章:

Android键盘向下滑动留下黑屏

java - 通过Java/Matlab获取Matlab的保存路径?

java - java中a + = 10和a = a + 10之间的区别?

android - 菜单中的图标比应有的小

java - 改变 textView 的布局引力

android - 一个ScrollView不能添加多个 View 吗?

java - 更改 ImageIcon 中的特定颜色

java - 如何确保我的程序只能执行一个实例?

Android 将点击变成触摸

android - 如何在我的应用程序中访问 gmail 附件数据