2014-07-10 94 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 {