2013-05-05 100 views
0

我有一个将用户带到联系人编辑屏幕的联系人列表。我正在尝试处理编辑活动/片段(联系人编辑)的关闭,具体取决于我正在使用哪一个。因此,如果我使用片段,我希望它在保存或从数据库中删除后关闭片段,但在小型设备上处于纵向/横向模式并运行活动时也是如此。当我处于双向模式时,我有以下代码会弹出一个错误(如我所料)。基本上,我希望用户看到联系人列表,编辑联系人,然后查看联系人的更新列表加上或减去他们的编辑。按下按钮时退出片段或活动

// 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); 
       } 
+0

安置自己的logcat跟踪 – Pragnani 2013-05-05 06:11:03

+0

什么是线ContactEditFragment.java中没有106? – Pragnani 2013-05-05 06:17:17

+0

getActivity()。finish(); – 2013-05-05 06:19:07

回答

1

我曾尝试下面的代码,到目前为止,它的作品,因为我期待:

// 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;