Android中的Fragment类使用进阶

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

删除了一些无关代码,注意看,我们在onCreateView中为textview添加了click事件,用于弹出我们的dialog,注意一行代码:
dialog.setTargetFragment(ContentFragment.this, REQUEST_EVALUATE);
我们调用了Fragment.setTargetFragment ,这个方法,一般就是用于当前fragment由别的fragment启动,在完成操作后返回数据的,符合我们的需求吧~~~注意,这句很重要。
接下来看EvaluateDialog代码:

package com.example.demo_zhy_23_fragments; 
 
import android.app.Activity; 
import android.app.AlertDialog; 
import android.app.Dialog; 
import android.content.DialogInterface; 
import android.content.DialogInterface.OnClickListener; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.app.DialogFragment; 
 
public class EvaluateDialog extends DialogFragment 
{ 
  private String[] mEvaluteVals = new String[] { "GOOD", "BAD", "NORMAL" }; 
  public static final String RESPONSE_EVALUATE = "response_evaluate"; 
 
  @Override 
  public Dialog onCreateDialog(Bundle savedInstanceState) 
  { 
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
 
    builder.setTitle("Evaluate :").setItems(mEvaluteVals, 
        new OnClickListener() 
        { 
          @Override 
          public void onClick(DialogInterface dialog, int which) 
          { 
            setResult(which); 
          } 
        }); 
    return builder.create(); 
  } 
 
  // 设置返回数据 
  protected void setResult(int which) 
  { 
    // 判断是否设置了targetFragment 
    if (getTargetFragment() == null) 
      return; 
 
    Intent intent = new Intent(); 
    intent.putExtra(RESPONSE_EVALUATE, mEvaluteVals[which]); 
    getTargetFragment().onActivityResult(ContentFragment.REQUEST_EVALUATE, 
        Activity.RESULT_OK, intent); 
 
  } 
} 

重点就是看点击后的setResult了,我们首先判断是否设置了targetFragment,如果设置了,意味我们要返回一些数据到targetFragment。
我们创建intent封装好需要传递数据,最后手动调用onActivityResult进行返回数据~~
最后我们在ContentFragment的onActivityResult接收即可。

ok,终于把这些tips贯穿到一起了,到此我们的Fragment的一些建议的用法就结束了~~~那么,最后提供下源码,也顺便贴个效果图:



注:相关教程知识阅读请移步到Android开发频道。