Android中的Fragment类使用进阶

2019-12-10 18:09:36于海丽

篇幅原因,具体的案例就不写了,大家自行测试。

6、Fragment间的数据传递
上面3中,我们展示了,一般的两个Fragment间的数据传递。
那么还有一种比较特殊的情况,就是两个Fragment在同一个Activity中:例如,点击当前Fragment中按钮,弹出一个对话框(DialogFragment),在对话框中的操作需要返回给触发的Fragment中,那么如何数据传递呢?对于对话框的使用推荐:Android 官方推荐 : DialogFragment 创建对话框
我们继续修改我们的代码:现在是ListTitleFragment , ContentFragment , 添加一个对话框:EvaluateDialog,用户点击ContentFragment 内容时弹出一个评价列表,用户选择评价。
现在我们的关注点在于:ContentFragment中如何优雅的拿到EvaluateDialog中返回的评价:
记住我们在一个Activity中,那么肯定不是使用startActivityForResult;但是我们返回的数据,依然在onActivityResult中进行接收。
好了看代码:
ContentFragment 

public class ContentFragment extends Fragment 
{ 
 
  private String mArgument; 
  public static final String ARGUMENT = "argument"; 
  public static final String RESPONSE = "response"; 
  public static final String EVALUATE_DIALOG = "evaluate_dialog"; 
  public static final int REQUEST_EVALUATE = 0X110; 
 
  //... 
 
  @Override 
  public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) 
  { 
    Random random = new Random(); 
    TextView tv = new TextView(getActivity()); 
    ViewGroup.LayoutParams params = new ViewGroup.LayoutParams( 
        LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 
    tv.setLayoutParams(params); 
    tv.setText(mArgument); 
    tv.setGravity(Gravity.CENTER); 
    tv.setBackgroundColor(Color.argb(random.nextInt(100), 
        random.nextInt(255), random.nextInt(255), random.nextInt(255))); 
    // set click 
    tv.setOnClickListener(new OnClickListener() 
    { 
 
      @Override 
      public void onClick(View v) 
      { 
        EvaluateDialog dialog = new EvaluateDialog(); 
        //注意setTargetFragment 
        dialog.setTargetFragment(ContentFragment.this, REQUEST_EVALUATE); 
        dialog.show(getFragmentManager(), EVALUATE_DIALOG); 
      } 
    }); 
    return tv; 
  } 
 
  //接收返回回来的数据 
  @Override 
  public void onActivityResult(int requestCode, int resultCode, Intent data) 
  { 
    super.onActivityResult(requestCode, resultCode, data); 
 
    if (requestCode == REQUEST_EVALUATE) 
    { 
      String evaluate = data 
          .getStringExtra(EvaluateDialog.RESPONSE_EVALUATE); 
      Toast.makeText(getActivity(), evaluate, Toast.LENGTH_SHORT).show(); 
      Intent intent = new Intent(); 
      intent.putExtra(RESPONSE, evaluate); 
      getActivity().setResult(Activity.REQUEST_OK, intent); 
    } 
 
  } 
}