按下按钮时退出片段或活动
问题描述:
我有一个将用户带到联系人编辑屏幕的联系人列表。我正在尝试处理编辑活动/片段(联系人编辑)的关闭,具体取决于我正在使用哪一个。因此,如果我使用片段,我希望它在保存或从数据库中删除后关闭片段,但在小型设备上处于纵向/横向模式并运行活动时也是如此。当我处于双向模式时,我有以下代码会弹出一个错误(如我所料)。基本上,我希望用户看到联系人列表,编辑联系人,然后查看联系人的更新列表加上或减去他们的编辑。按下按钮时退出片段或活动
// Set the save button to check the required fields, save the contact and finish
saveButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
if (TextUtils.isEmpty(mLastName.getText().toString()) ||
TextUtils.isEmpty(mFirstName.getText().toString())) {
makeToast();
} else {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.popBackStackImmediate();
getActivity().finish();
}
}
});
// Set the delete button to delete the contact and close the fragment
deleteButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
// Delete the contactUri created from an ID passed in from contactActivity
getActivity().getContentResolver().delete(contactUri, null, null);
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.popBackStackImmediate();
getActivity().finish();
}
});
return aView;
与上面的代码我在contactEditFragment.onClick
得到一个NullPointerException我想我需要一个方式的活动和片段之间进行区分。
05-05 05:40:57.200: E/AndroidRuntime(1350): FATAL EXCEPTION: main
05-05 05:40:57.200: E/AndroidRuntime(1350): java.lang.NullPointerException
05-05 05:40:57.200: E/AndroidRuntime(1350): at com.somestuff.ContactEditFragment$1.onClick(ContactEditFragment.java:106)
05-05 05:40:57.200: E/AndroidRuntime(1350): at android.view.View.performClick(View.java:4204)
05-05 05:40:57.200: E/AndroidRuntime(1350): at android.view.View$PerformClick.run(View.java:17355)
05-05 05:40:57.200: E/AndroidRuntime(1350): at android.os.Handler.handleCallback(Handler.java:725)
05-05 05:40:57.200: E/AndroidRuntime(1350): at android.os.Handler.dispatchMessage(Handler.java:92)
05-05 05:40:57.200: E/AndroidRuntime(1350): at android.os.Looper.loop(Looper.java:137)
05-05 05:40:57.200: E/AndroidRuntime(1350): at android.app.ActivityThread.main(ActivityThread.java:5041)
05-05 05:40:57.200: E/AndroidRuntime(1350): at java.lang.reflect.Method.invokeNative(Native Method)
05-05 05:40:57.200: E/AndroidRuntime(1350): at java.lang.reflect.Method.invoke(Method.java:511)
05-05 05:40:57.200: E/AndroidRuntime(1350): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
05-05 05:40:57.200: E/AndroidRuntime(1350): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
05-05 05:40:57.200: E/AndroidRuntime(1350): at dalvik.system.NativeStart.main(Native Method)
这里是onContactSelected:
public void onContactSelected(String id) {
if (mTwoPane)
{
Log.i("SECOND INSIDE OF ONITEMSELECTED TWO PANE MODE !!! IN CONTACTS ACTIVITY - THE ID IS:", id);
// In two-pane mode, show the contact edit view in this activity by
// adding or replacing the detail fragment using a
// fragment transaction.
// Create new fragment and transaction
Bundle arguments = new Bundle();
arguments.putString(ContactEditFragment.CONTACT_ID, id);
ContactEditFragment contactEditFragment = new ContactEditFragment();
contactEditFragment.setArguments(arguments);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack
transaction.replace(R.id.item_detail_container, contactEditFragment);
transaction.addToBackStack(null);
// Commit the transaction
transaction.commit();
} else {
// In single-pane mode, simply start the detail activity
// for the selected contact ID.
Intent detailIntent = new Intent(this, ContactEditActivity.class);
detailIntent.putExtra(ContactEditFragment.CONTACT_ID, id);
startActivity(detailIntent);
}
答
我曾尝试下面的代码,到目前为止,它的作品,因为我期待:
// Set the save button to check the required fields, save the contact and finish
saveButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
if (TextUtils.isEmpty(mLastName.getText().toString()) ||
TextUtils.isEmpty(mFirstName.getText().toString())) {
makeToast();
} else {
if (getActivity().findViewById(R.id.item_detail_container) != null){
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.popBackStackImmediate();
}
else{getActivity().finish();}
}
}
});
// Set the delete button to delete the contact and close the fragment
deleteButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
// Delete the contactUri created from an ID passed in from contactActivity
getActivity().getContentResolver().delete(contactUri, null, null);
if (getActivity().findViewById(R.id.item_detail_container) != null){
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.popBackStackImmediate();
}
else{getActivity().finish();}
}
});
return aView;
安置自己的logcat跟踪 – Pragnani 2013-05-05 06:11:03
什么是线ContactEditFragment.java中没有106? – Pragnani 2013-05-05 06:17:17
getActivity()。finish(); – 2013-05-05 06:19:07