2017-07-16 85 views
0

我在我的應用程序中擴展了ListFragment。我想在長按列表項目時顯示一個簡單的對話框,其中包含選項「編輯」和「刪除」(作爲文字瀏覽)。不幸的是,我的對話框在實例化Textviews時崩潰。 這裏是我的代碼: 在MyListFragment類:片段中的自定義對話框

@Override 
public void onActivityCreated(Bundle savedState) { 
    super.onActivityCreated(savedState); 

    getListView().setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 

     @Override 
     public boolean onItemLongClick(AdapterView<?> arg0, View arg1, 
             int arg2, long arg3) { 

      showDialog(); 
      return true; 
     } 
    }); 
} 



protected void showDialog(){ 

    Dialog dialog = new Dialog(getActivity()); 
    dialog.setCancelable(true); 

    dialog.setContentView(R.layout.dialog); 

    TextView edit = (TextView) getView().findViewById(R.id.edit); 
    TextView delete = (TextView) getView().findViewById(R.id.delete); 


    edit.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      //Do something 

     } 
    }); 
    delete.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      //Do something 

     } 
    }); 



    dialog.show(); 
}; 

的dialog.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="200dp" 
    android:layout_height="wrap_content" 
    android:id="@+id/dialog" 
    android:paddingTop="@dimen/dialog_padding" 
    android:paddingBottom="@dimen/dialog_padding" 
    > 

    <TextView 
     android:id="@+id/edit" 
     android:layout_width="match_parent" 
     android:layout_height="@dimen/dialog_row_height" 
     android:paddingTop="20dp" 
     android:paddingBottom="20dp" 
     android:paddingLeft="6dp" 
     android:paddingRight="6dp" 
     android:textColor="@color/colorPrimaryText" 
     android:textAlignment="center" 
     android:textSize="@dimen/text_size" 
     android:text="@string/edit" /> 

    <TextView 
     android:id="@+id/delete" 
     android:layout_width="match_parent" 
     android:layout_height="@dimen/dialog_row_height" 
     android:paddingTop="20dp" 
     android:paddingBottom="20dp" 
     android:paddingLeft="6dp" 
     android:paddingRight="6dp" 
     android:textColor="@color/colorPrimaryText" 
     android:textAlignment="center" 
     android:textSize="@dimen/text_size" 
     android:text="@string/delete" /> 

    </LinearLayout> 

的logcat的說java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setOnClickListener(android.view.View$OnClickListener)' on a null object reference 其實,我通過Log.d檢查和TextView的結果無效。 我不明白爲什麼。我顯然缺少一些東西。 你能幫我理解這個問題的原因嗎?萬分感謝!

回答

2

R.id.editR.id.delete是不是片段的部分是對話,所以不是從getView得到編輯和刪除視圖(),你應該從對話框佈局得到它,

你可以試試這個。

protected void showDialog(){ 

    Dialog dialog = new Dialog(getActivity()); 
    dialog.setCancelable(true); 

    View view = getActivity().getLayoutInflater().inflate(R.layout.dialog, null); 
    dialog.setContentView(view); 

    TextView edit = (TextView) view.findViewById(R.id.edit); 
    TextView delete = (TextView) view.findViewById(R.id.delete); 


    edit.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      //Do something 

     } 
    }); 
    delete.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      //Do something 

     } 
    }); 



    dialog.show(); 
}; 
+0

謝謝,但我試過了,我一直得到同樣的例外。 – paola91

+0

你改變了這樣,_TextView edit =(TextView)view.findViewById(R.id.edit); _而不是getView你改變了查看和檢查..? –

+0

當然,我做到了。 TextView仍然會導致null。 – paola91