2017-07-16 63 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