Fragment之间Bundle传值

本文介绍了一个Android应用中使用Fragment进行数据展示与交互的示例。具体演示了如何在用户选择书籍列表中的某一项后,动态加载并显示书籍详情的Fragment。此过程涉及Fragment之间的数据传递及界面更新。
package com.example.fragment39a;


import com.example.fragment39a.BookListFragment.Callbacks;


import android.os.Bundle;
import android.app.Activity;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.Menu;


public class MainActivity extends FragmentActivity implements Callbacks {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


@Override
public void onItemSelected(int position) {
//获取到当前点击的Book对象
//动态加载详情Fragment(传递给右边Fragmnet)
BookContent.Book model=BookContent.list.get(position);

Bundle bundle=new Bundle();
bundle.putSerializable("data", model);

//通过setArguments给Fragment传递数据
BookDetailFragment f=new BookDetailFragment();
f.setArguments(bundle);

//加载详情fragment
FragmentManager manager=getSupportFragmentManager();
FragmentTransaction action=manager.beginTransaction();
action.replace(R.id.lin_content, f);
action.commit();



}
  
    

}




===============================================================================================

package com.example.fragment39a;


import com.example.fragment39a.BookContent.Book;


import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;


public class BookDetailFragment extends Fragment{


private BookContent.Book model;


@Override
public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//接收传来的数据getArguments
Bundle bun=getArguments();
model = (Book) bun.get("data");


}

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

TextView tv1=(TextView) v.findViewById(R.id.textView1);
TextView tv2=(TextView) v.findViewById(R.id.textView2);

if(model!=null){
tv1.setText(model.getBookTitle());
tv2.setText(model.getBookContent());
}

return v;
}


}

### 实现Fragment之间的方法 在安卓开发中,Fragment之间递可以通过多种方式实现。以下详细介绍通过`Bundle`对象和`setArguments()`方法进行的方式[^4]。 #### 使用 `setArguments()` 和 `getArguments()` 方法 每个Fragment都可以通过`setArguments()`方法接收一个`Bundle`对象,并使用`getArguments()`方法获取递的数据。这种方式的优点是数据Fragment的生命周期内是持久的,即使Fragment被暂停或停止,数据也不会丢失[^4]。 以下是具体的代码示例: ```java // 在源Fragment中准备数据并通过BundleBundle bundle = new Bundle(); bundle.putString("key", "Hello from Fragment A"); // 创建目标Fragment实例并设置参数 FragmentB fragmentB = new FragmentB(); fragmentB.setArguments(bundle); // 使用FragmentTransaction切换到目标Fragment FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.replace(R.id.fragment_container, fragmentB); transaction.addToBackStack(null); // 可选:将事务添加到回退栈 transaction.commit(); ``` 在目标Fragment中,可以通过`getArguments()`方法获取递的数据: ```java // 在目标Fragment中获取递的 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle args = getArguments(); if (args != null) { String value = args.getString("key"); Log.d("FragmentB", "Received value: " + value); } } ``` #### 注意事项 - 如果Fragment被完全销毁(例如,由于内存不足),那么通过`setArguments()`递的数据将会丢失。因此,如果需要在Fragment被销毁后保留数据,可以考虑使用其他持久化方法,如数据库或SharedPreferences[^4]。 - 在Fragment事务中,确保正确调用`commit()`方法以提交事务[^2]。 ### 其他方法 除了上述方法,还可以通过共享ViewModel实现Fragment之间的通信。这种方法适用于需要在多个Fragment之间共享数据的场景[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值