1

私はMainActivityFragmentOne と呼ばれるfragmentを主催し、DetailPagerActivityという名前の別のActivityがある私はFragmentOneDetailFragmentからmethodを使用したいDetailFragmentCallメソッド

と呼ばれる別のfragmentを主催してい ..どうすればいいですか? 私はそうでFragmentManagerとを使用しようとしましたが、

は、私がここにDeatilFragmentFragmentOne>onSwiped

からgetDetailReport()を呼び出すようにされたくなかった私のFragmentOne

public class FragmentOne extends Fragment { 

private RecyclerView mDetailRecyclerView; 
private DetailAdapter mAdapter; 
private boolean mNumberVisible; 

private View view; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setHasOptionsMenu(true); } 

@Override 
public View onCreateView(LayoutInflater inflater, 
         ViewGroup container, 
         Bundle savedInstanceState) { 
    view = inflater.inflate(R.layout.fragment_one_layout, 
      container, false); 

    mDetailRecyclerView = (RecyclerView) 
      view.findViewById(R.id.detail_recycler_view); 
     .. 
     .. 
    return view; 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    updateUI(); 
} 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putBoolean(SAVED_NUMBER_VISIBLE, mNumberVisible); 
} 


private class DetailHolder extends RecyclerView.ViewHolder 
     implements View.OnClickListener, View.OnLongClickListener { 
    private TextView mTitleTextView; 
    private Detail mDetail; 
    private RatingBar mRatingBar; 

    public DetailHolder(LayoutInflater inflater, ViewGroup parent) { 
     super(inflater.inflate(R.layout.list_item_detail, 
       parent, false)); 

     itemView.setOnClickListener(this); 
     itemView.setOnLongClickListener(this); 
     mTitleTextView = (TextView) itemView.findViewById(R.id.detail_title); 
     mRatingBar = (RatingBar) itemView.findViewById(R.id.ratingBar); 

    } 

    public void bind(Detail detail) { 
     mDetail = detail; 
     mTitleTextView.setText(mDetail.getTitle()); 
     mRatingBar.setRating(mDetail.getRate()); } 

    @Override 
    public void onClick(View view) { 
     Intent intent = DetailPagerActivity.newIntent(getActivity(), 
       mDetail.getId()); 
     startActivity(intent); } 

     return true; 
    } 
} 


private class DetailAdapter extends RecyclerView.Adapter<DetailHolder> { 
    private List<Detail> mDetails; 

    public DetailAdapter(List<Detail> details) { 
     mDetails = details; 
    } 

    @Override 
    public DetailHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     LayoutInflater layoutInflater = 
       LayoutInflater.from(getActivity()); 

     return new DetailHolder(layoutInflater, parent); 
    } 

    @Override 
    public void onBindViewHolder(DetailHolder holder, int position) { 
     Detail detail = mDetails.get(position); 
     holder.bind(detail); 
    } 

    @Override 
    public int getItemCount() { 
     return mDetails.size(); 
    } 

    public void setDetails(List<Detail> details) { 
     mDetails = details; 


     //////////////////////////////////////////////////////////////////////////////////////////////////////// 
     ItemTouchHelper.SimpleCallback simpleCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT) { 
      private Detail mDetail; 

      @Override 
      public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { 
       return false; 
      } 

      @Override 
      public void onSwiped(final RecyclerView.ViewHolder viewHolder, int direction) { 
       final int position = viewHolder.getAdapterPosition(); //get position which is swipe 

        if (direction == ItemTouchHelper.LEFT) { //if swipe left 

         AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); //alert for confirm to delete 
         builder.setMessage("Are you sure to delete?"); //set message 

         builder.setPositiveButton("REMOVE", new DialogInterface.OnClickListener() { //when click on DELETE 
          @Override 
          public void onClick(DialogInterface dialog, int which) { 

           Intent i = new Intent(Intent.ACTION_SEND); 
           i.setType("text/plain"); 
           i.putExtra(Intent.EXTRA_TEXT, getDetailReport()); 
           i.putExtra(Intent.EXTRA_SUBJECT, 
             getString(R.string.detail_report_subject)); 
           i = Intent.createChooser(i, getString(R.string.send_report)); 
           startActivity(i); 

           ////////////////////////////////////////////////////// 
//        mAdapter.notifyItemRemoved(position); //item removed from recylcerview 
//        DetailLab.get(getActivity()).deleteDetail(mDetail); 
//        updateUI(); 
//        updateNumbers(); 
           dialog.dismiss(); 
//        return; 
          } 
         }).setNegativeButton("CANCEL", new DialogInterface.OnClickListener() { //not removing items if cancel is done 
          @Override 
          public void onClick(DialogInterface dialog, int which) { 
           dialog.dismiss(); 
          } 
         }); 
         builder.show(); //show alert dialog 
        } 
       } 
      }; 
      ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleCallback); 
      itemTouchHelper.attachToRecyclerView(mDetailRecyclerView); //set swipe to recylcerview 

     } 
    } 
} 

、これはあります私のDetailFargment

public class DetailFragment extends Fragment { 

private static final String ARG_DETAIL_ID = "detail_id"; 
private static final String DIALOG_DATE = "DialogDate"; 
private static final String DIALOG_PHOTO = "DialogPhoto"; 

private static final int REQUEST_DATE = 0; 
private static final int REQUEST_PHOTO = 2; 

.. 
.. 

public static DetailFragment newInstance (UUID detailId) { 
    Bundle args = new Bundle(); 
    args.putSerializable(ARG_DETAIL_ID, detailId); 

    DetailFragment fragment = new DetailFragment(); 
    fragment.setArguments(args); 
    return fragment; 
} 

@Override 
public void onCreate (Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setHasOptionsMenu(true); 

    UUID detailId = (UUID) getArguments().getSerializable(ARG_DETAIL_ID); 
    mDetail = DetailLab.get(getActivity()).getDetail(detailId); 

    mPhotoFile = DetailLab.get(getActivity()).getPhotoFile(mDetail); 
} 

@Override 
public void onPause() { 
    super.onPause(); 

    DetailLab.get(getActivity()).updateDetail(mDetail); 
} 

@Override 
public View onCreateView (LayoutInflater inflater, 
          ViewGroup container, 
          Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.fragment_detail, 
      container, false); 


    .. 
    .. 

    /////////////////////////// Report Button 
    mReportButton = (Button) v.findViewById(R.id.detail_report); 
    mReportButton.setOnClickListener(new View.OnClickListener() { 
     public void onClick (View v) { 

      Intent i = new Intent(Intent.ACTION_SEND); 
      i.setType("text/plain"); 
      i.putExtra(Intent.EXTRA_TEXT, getDetailReport()); 
      i.putExtra(Intent.EXTRA_SUBJECT, 
        getString(R.string.detail_report_subject)); 
      i = Intent.createChooser(i, getString(R.string.send_report)); 
      startActivity(i); 
     } 
    }); 
.. 
.. 
    return v; 
} 

@Override 
public void onResume() { 
    super.onResume(); 
} 

//////////////////////////////////// REPORT 
private String getDetailReport() { 
    String dateFormat = "EEE, MMM dd"; 
    String dateString = DateFormat.format(
      dateFormat, mDetail.getDate()).toString(); 

    String rateString = null; 

    String report = getString(R.string.detail_report, 
      mDetail.getTitle(), dateString, 
      rateString, rateString 
      ); 

    return report; 
} 
.. 
..} 
+0

アクティビティは、他の「アクティビティ」インスタンス(またはそのフラグメント)の存在に決して依存してはいけません。 –

+0

@KevinKrumwiedeはい、今、おかげです。 –

答えて

0

フラグメントの中から何らかの種類のデータ/ユーティリティクラスに移動する必要があります。それで、両方の場所から呼び出すことができます。特に、複数のアクティビティ/フラグメントで使用する必要がある場合は、データはUIとは別にする必要があります。

無関係のアクティビティ/フラグメント間で通信したい場合は、最も簡単な方法は、ブロードキャスト/ブロードキャスト受信機を使用することです。これは通常、データのために他のアクティビティ/フラグメントを照会するのではなく、他のアクティビティ/フラグメントに更新が必要であることを通知するために使用されます。通常、フラグメント/アクティビティは、ブロードキャストを受信した場合、またはゼロから初期化された場合は正常な状態にある場合に更新されます。

アクティビティ/フラグメントを他のアクティビティ/フラグメントに依存させるときに実行する問題は、表示されていないアクティビティ/フラグメントをクリーンアップできるということです。実際に起こったアクションに依存することはできません。

+0

ありがとう、ありがとう。私は別の 'class'、' DetailLab'で 'getDetailReport'を動かしました。私は' Fragment's –