Android中的Fragment类使用进阶

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

ContentFragment

public class ContentFragment extends Fragment 
{ 
 
  private String mArgument; 
  public static final String ARGUMENT = "argument"; 
  public static final String RESPONSE = "response"; 
 
  @Override 
  public void onCreate(Bundle savedInstanceState) 
  { 
    super.onCreate(savedInstanceState); 
    Bundle bundle = getArguments(); 
    if (bundle != null) 
    { 
      mArgument = bundle.getString(ARGUMENT); 
      Intent intent = new Intent(); 
      intent.putExtra(RESPONSE, "good"); 
      getActivity().setResult(ListTitleFragment.REQUEST_DETAIL, intent); 
    } 
 
  } 
 
  public static ContentFragment newInstance(String argument) 
  { 
    Bundle bundle = new Bundle(); 
    bundle.putString(ARGUMENT, argument); 
    ContentFragment contentFragment = new ContentFragment(); 
    contentFragment.setArguments(bundle); 
    return contentFragment; 
  } 
 
  @Override 
  public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) 
  { 
    Random random = new Random(); 
    TextView tv = new TextView(getActivity()); 
    tv.setText(mArgument); 
    tv.setGravity(Gravity.CENTER); 
    tv.setBackgroundColor(Color.argb(random.nextInt(100), 
        random.nextInt(255), random.nextInt(255), random.nextInt(255))); 
    return tv; 
  } 
} 

贴出了两个Fragment的代码,可以看到我们在ListTitleFragment.onListItemClick,使用startActivityForResult()跳转到目标Activity,在目标Activity的Fragment(ContentFragment)中获取参数,然后调用getActivity().setResult(ListTitleFragment.REQUEST_DETAIL, intent);进行设置返回的数据;最后在ListTitleFragment.onActivityResult()拿到返回的数据进行回显;
为大家以后在遇到类似问题时,提供了解决方案;也说明了一个问题:fragment能够从Activity中接收返回结果,但是其自设无法产生返回结果,只有Activity拥有返回结果。
接下来我要贴一下,这两个Fragment的宿主Activity:
ListTitleActivity

public class ListTitleActivity extends FragmentActivity 
{ 
 
  private ListTitleFragment mListFragment; 
 
  @Override 
  protected void onCreate(Bundle savedInstanceState) 
  { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_single_fragment); 
   
    FragmentManager fm = getSupportFragmentManager(); 
    mListFragment = (ListTitleFragment) fm.findFragmentById(R.id.id_fragment_container); 
     
    if(mListFragment == null ) 
    { 
      mListFragment = new ListTitleFragment(); 
      fm.beginTransaction().add(R.id.id_fragment_container,mListFragment).commit(); 
    } 
 
  } 
}