2014-07-10 98 views
1

我目前使用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,但现在看来,我的应用程序崩溃。我是一个超级新手,我只是想不出在这些不同按钮上设置不同事件的方法。

这是我的MainActivity.java:http://pastebin.com/b1c90Bmm

过程:com.phakeapps.mladmerindzhey.app,PID:18970 了java.lang.RuntimeException:无法启动活动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)(android.os.Load.loop(Looper.java:136))android.app.Avale.Handler.dispatchMessage(Handler.java:102) 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 (原生方法) 引起:java.lang.NullPointerException at com.phakeapps.mladmerindzhey.app.MainActivity.onCr在android.app.ActivityThread.performLaunchActivity()中使用android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) (MainActivity.java:24) (android.app.Activity.performCreate(Activity.java:5231) Activity.Thread.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。主(本地方法)

我下面这个教程: http://code.tutsplus.com/tutorials/android-user-interface-design-horizontal-view-paging--mobile-8231

还有就是我的整个代码: 这是我mainactivity.java:http://paste.ofcode.org/K7Nq64XSuLRGaF7F3TNGPi, 这是MyPagerAdapter:http://paste.ofcode.org/FKMrNtULdUj3ypG4QFt6aD 的main.xml :http://paste.ofcode.org/WJg7i2gpB3QhmW4nRhzkBu, 这是when.xml:http://paste.ofcode.org/3aJQS2AUiMFwDEhfkfUTQ9M 这是what.xml:http://paste.ofcode.org/W2grnCgfn2DVRTsvNUfymB

我相信这个问题是该按钮位于不同的文件中,但我不确定如何在布局更改时找到它们。

+2

请从logcat的 – Rawa

+0

好吧添加错误消息/堆栈跟踪,抱歉,我添加了我的文件和我收到的错误。 –

回答

1

例如,如果你有多个Buttons布局是这样的:

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

您可以将不同的ID分配给每个Button,在这个例子中,第一Button有ID R.id.btnOne和第二ButtonR.id.btnTwo

您可以通过致电findViewById()并输入View的编号来代替Buttons。因此,要获得第一Button你必须这样做:

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

,并且其具有ID R.id.btnTwo可以这样被检索的第二Button

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

一个你必须每个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(); 
    } 
}); 
+0

这是我的mainactivity.java:http://paste.ofcode.org/K7Nq64XSuLRGaF7F3TNGPi,这是MyPagerAdapter:http://paste.ofcode.org/FKMrNtULdUj3ypG4QFt6aD:main.xml:http://paste.ofcode.org/ WJg7i2gpB3QhmW4nRhzkBu,这是when.xml:http://paste.ofcode.org/3aJQS2AUiMFwDEhfkfUTQ9M,这是what.xml:http://paste.ofcode.org/W2grnCgfn2DVRTsvNUfymB –

+0

为什么你发布所有这些链接?我不打算浏览所有这些。将相关部分编辑到您的问题中。 –

+0

因为我知道你写了这些东西,并感谢他们解释它们。但按钮是在不同的文件,当我把这个代码放在'onCreate'应用程序崩溃(我发布了erorr消息)。我的问题是如何处理文件上的按钮。 –

1

如果你想在你的片段按钮,你有定义片段布局中的按钮。

然后,你的片段里,你可以定义按钮是这样的:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.layout_fragment, container, false); 

    Button button1 = (Button) view.findViewById(R.id.button1); 
    //... 

    button1.setOnClickListener(this); 

    return view; 
} 


@Override 
public void onClick(View v) { 
    switch (v.getId()){ 
     case R.id.button1: 
      //DO WORK 
      break; 
    } 
} 

你也应该扩展OnClickListener在您的片段:

public class MyFragment extends Fragment implements OnClickListener {