2014-02-12 28 views
1

好吧,所以我有一個按鈕和一個列表視圖的主佈局,我想要做的是當按鈕被點擊時,其他一些東西顯示在上面(其他一些按鈕和textviews ...),所以在技術上,該按鈕將使Listview自身滑落,以便顯示其他元素。 所以我創建了一個名爲Slider的類,擴展了LinearLayout類,我在其中編寫了製作幻燈片的方法,並且我已經在XML文件中使用這個類來顯示佈局。Android的滑塊佈局和空指針異常

首先,這裏的代碼:

Slider.java:

public class Slider extends LinearLayout{ 

    //The layout that'll show up when the slide is done: 

    public RelativeLayout Show= (RelativeLayout)findViewById(R.id.Show); 

    public Slider(Context context) { 
     super(context); 
    } 

    //Method that'll make the slide 
    public void toggle(){ 
     TranslateAnimation animation; 
     animation = new TranslateAnimation(0.0f, 0.0f, 0.0f, -Show.getHeight()); 

     animation.setDuration(2000); 
     animation.setInterpolator(new AccelerateInterpolator()); 
     startAnimation(animation); 
    } 
    public String toString(){ 
     return "THE TOSTRING...."; 
    } 

} 

Slider.xml:

<com.example.andtestbdd3.Slider 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/slider" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="horizontal" 
    android:padding="5dip"> 

    <RelativeLayout 
     android:id="@+id/Show" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/bouton1"> 

     <EditText 
      android:id="@+id/Edit1" 
      android:layout_height="wrap_content" 
      android:layout_width="130dp" 
      android:hint="Nom" 
      android:paddingTop="1dp" 
      android:paddingBottom="1dp" 
      android:background="#C2BCBC" 
      android:maxLength="25" 
      android:layout_marginRight="20dp" 
      android:layout_marginBottom="3dp"/> 

     <EditText 
      android:id="@+id/Edit2" 
      android:layout_height="wrap_content" 
      android:layout_width="130dp" 
      android:hint="Prenom" 
      android:paddingTop="1dp" 
      android:paddingBottom="1dp" 
      android:layout_toRightOf="@id/Edit1" 
      android:background="#C2BCBC" 
      android:maxLength="25"/> 

    </RelativeLayout> 

</com.example.andtestbdd3.Slider> 

MaintActivity.java:

public class MainActivity extends Activity { 

    Slider slider = null; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
      //Getting the slider from the XML file which uses the Slider class (Slider.java) 
     slider = (Slider)findViewById(R.id.slider); 
     //everything is ok till here, When I try to use some stuff from the Slider,      //the NullPointerEXCEPTION 
     //Will show up, for example; if I call the toString methode: 
    Toast.makeText(this,"Le text: "+slider.toString(), Toast.LENGTH_LONG).show(); 
    } 

} 

日誌:

02-12 09:07:20.870: D/AndroidRuntime(933): Shutting down VM 
02-12 09:07:20.870: W/dalvikvm(933): threadid=1: thread exiting with uncaught exception (group=0xb4aaaba8) 
02-12 09:07:20.890: E/AndroidRuntime(933): FATAL EXCEPTION: main 
02-12 09:07:20.890: E/AndroidRuntime(933): Process: com.example.andtestbdd3, PID: 933 
02-12 09:07:20.890: E/AndroidRuntime(933): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.andtestbdd3/com.example.andtestbdd3.MainActivity}: java.lang.NullPointerException 
02-12 09:07:20.890: E/AndroidRuntime(933): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195) 
02-12 09:07:20.890: E/AndroidRuntime(933): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
02-12 09:07:20.890: E/AndroidRuntime(933): at android.app.ActivityThread.access$800(ActivityThread.java:135) 
02-12 09:07:20.890: E/AndroidRuntime(933): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
02-12 09:07:20.890: E/AndroidRuntime(933): at android.os.Handler.dispatchMessage(Handler.java:102) 
02-12 09:07:20.890: E/AndroidRuntime(933): at android.os.Looper.loop(Looper.java:136) 
02-12 09:07:20.890: E/AndroidRuntime(933): at android.app.ActivityThread.main(ActivityThread.java:5017) 
02-12 09:07:20.890: E/AndroidRuntime(933): at java.lang.reflect.Method.invokeNative(Native Method) 
02-12 09:07:20.890: E/AndroidRuntime(933): at java.lang.reflect.Method.invoke(Method.java:515) 
02-12 09:07:20.890: E/AndroidRuntime(933): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
02-12 09:07:20.890: E/AndroidRuntime(933): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
02-12 09:07:20.890: E/AndroidRuntime(933): at dalvik.system.NativeStart.main(Native Method) 
02-12 09:07:20.890: E/AndroidRuntime(933): Caused by: java.lang.NullPointerException 
02-12 09:07:20.890: E/AndroidRuntime(933): at com.example.andtestbdd3.MainActivity.onCreate(MainActivity.java:53) 
02-12 09:07:20.890: E/AndroidRuntime(933): at android.app.Activity.performCreate(Activity.java:5231) 
02-12 09:07:20.890: E/AndroidRuntime(933): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
02-12 09:07:20.890: E/AndroidRuntime(933): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) 
02-12 09:07:20.890: E/AndroidRuntime(933): ... 11 more 

activity_main.xml中:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:background="#000000" 
    tools:context=".MainActivity" > 

    <Button 
     android:id="@+id/bouton1" 
     android:layout_width="wrap_content" 
     android:layout_height="30dp" 
     android:background="#595959" 
     android:gravity="center" 
     android:paddingBottom="2dp" 
     android:text="Ajouter" /> 



<LinearLayout 
    android:id="@+id/layout" 
    android:layout_width="250dp" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="70dp" 
    android:layout_marginLeft="17dp" 
    android:padding="2dp" 
    android:background="#595959"> 

    <ListView 
     android:id="@+id/lista" 
     android:layout_width="250dp" 
     android:layout_height="fill_parent" 
     android:background="#7E7E7E" 
     android:choiceMode="singleChoice" 
     android:divider="#6F6F6F" 
     android:dividerHeight="2dp" 
     android:paddingLeft="15dp" 
     android:paddingRight="15dp" 
     /> 

</LinearLayout> 

</RelativeLayout> 

所以,當我從XML文件,沒有問題得到滑塊。 但是當我嘗試使用類文件中的某些方法時,我得到NullPointerException! 我希望我的問題很明確。如果您需要更多信息,請告訴我,我會盡快更新。 謝謝

+2

帖子UR logcat的! –

+1

post activity_main.xml ... – njzk2

+0

更新....添加了Activity_main.xml –

回答

0

沒有logcat輸出我在黑暗中拍了一下,但在快速瀏覽後,我發現你在setContentView方法中使用了activity_main.xml。很高興看到activity_main佈局代碼。 我假設你的錯誤可能會在這裏:

 slider = (Slider)findViewById(R.id.slider); 

因爲findViewById(R.id.slider)將查找ID爲「滑蓋」的activity_main.xml中內您之前設置視圖元素,它是不看在你的slider.xml裏面! ...如果找不到,將返回null!

編輯:好吧,現在logcat輸出,現在確認slider設置爲null。

編輯2:所以,現在我可以看到你的activity_main佈局:讓我來解釋一步一步發生了什麼:

  1. 您從佈局的ressource「activity_main」設置活動內容在這裏:setContentView(R.layout.activity_main);

  2. 然後使用findViewById(ID)來查找內部活動內容與R.id.slider 景色!

  3. findViewById返回null,因爲activity_main中沒有R.id.slider。XML

  4. 滑塊指向NULL在祝酒詞

  5. 你試圖調用toString()方法,但你的滑塊== NULL!

==> NPE!

建議解決方案:

也許合併您slider.xml代碼到你的活動主要佈局!如果你不希望它從一開始就是可見的,那麼你可以將視圖的可見性設置爲GONE。例如像這樣:

android:visibility="gone" 

稍後,您可以再次以可編程方式將Visibily設置爲可見。

真的希望這有助於!

+0

爲什麼你認爲滑塊爲空?你提出什麼樣的解決方案? –

+0

@ Tha.Poox我添加了一個解決方案建議 – donfuxx

+0

謝謝你的解釋:) 但我發現了另一種更好的方法來做到這一點,我會盡快上傳它。 –

1

在我看來,像你的Slider未找到對象,併爲空當您嘗試使用slider.toString() 如可以從logcat的線可以看出:

com.example.andtestbdd3.MainActivity.onCreate(MainActivity.java:53)