返回

揭开Android 点将台的奥秘:让 Fragment 发挥神力[- Fragment -]

Android

在Android开发的疆场上,Fragment犹如点将台上的将星,统领着屏幕上的一方天地,进可攻、退可守,为应用构建灵活多变的布局。本文将深入Android Fragment的奥妙,手把手带你领略Fragment的强大之处,让你在开发战场上运筹帷幄,所向披靡。

Fragment的征程:生命周期

Fragment的生命周期与Activity类似,由一系列回调方法组成,这些方法控制着Fragment的创建、恢复、暂停和销毁。

  • onAttach(Activity activity) :Fragment被添加到Activity时调用。
  • onCreate(Bundle savedInstanceState) :Fragment首次创建时调用。
  • onStart() : Fragment可见并与用户交互时调用。
  • onResume() : Fragment完全可见时调用。
  • onPause() : Fragment不再与用户交互但仍可见时调用。
  • onStop() : Fragment不可见时调用。
  • onDestroyView() : Fragment的视图被销毁时调用。
  • onDestroy() : Fragment被销毁时调用。
  • onDetach() : Fragment从Activity中移除时调用。

点兵点将:数据传递

Fragment和Activity之间的数据传递可以通过两种主要方式实现:

  • Bundle : 使用Bundle对象传递简单的数据类型,如字符串、数字和布尔值。
  • ActivityResult : 使用startActivityForResult和onActivityResult方法在Activity和Fragment之间传递复杂的数据对象。

Bundle

// 在Fragment中传递数据
Bundle bundle = new Bundle();
bundle.putString("message", "Hello from Fragment");

// 在Activity中获取数据
String message = getIntent().getExtras().getString("message");

startActivityForResult和onActivityResult

// 在Fragment中启动Activity并传递请求码
Intent intent = new Intent(getContext(), MyActivity.class);
startActivityForResult(intent, REQUEST_CODE);

// 在Activity中处理结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_CODE) {
        // 获取返回数据
        String result = data.getStringExtra("result");
    }
}

点将台实战:一个简单的示例

为了加深对Fragment的理解,让我们构建一个简单的点将台应用程序。该应用程序将使用Fragment来显示一系列按钮,每个按钮代表一种士兵类型。当用户单击按钮时,将显示该士兵类型的详细信息。

布局文件 (fragment_soldier.xml)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/button_soldier"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="召唤" />
</RelativeLayout>

Fragment类 (SoldierFragment.java)

public class SoldierFragment extends Fragment {

    private Button buttonSoldier;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // 从布局文件加载视图
        View view = inflater.inflate(R.layout.fragment_soldier, container, false);

        // 绑定按钮
        buttonSoldier = (Button) view.findViewById(R.id.button_soldier);

        // 设置按钮点击监听器
        buttonSoldier.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 创建士兵信息Bundle
                Bundle bundle = new Bundle();
                bundle.putString("type", "步兵");
                bundle.putInt("strength", 10);
                bundle.putString("description", "近战步兵,擅长正面作战");

                // 启动详细信息Activity
                Intent intent = new Intent(getContext(), SoldierDetailActivity.class);
                intent.putExtras(bundle);
                startActivityForResult(intent, REQUEST_CODE);
            }
        });

        return view;
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_CODE) {
            // 获取返回数据
            String result = data.getStringExtra("result");

            // 更新按钮文本
            buttonSoldier.setText(result);
        }
    }
}

活动类 (SoldierDetailActivity.java)

public class SoldierDetailActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // 获取士兵信息Bundle
        Bundle bundle = getIntent().getExtras();
        String type = bundle.getString("type");
        int strength = bundle.getInt("strength");
        String description = bundle.getString("description");

        // 构建返回数据
        Intent intent = new Intent();
        intent.putExtra("result", type + " " + strength + " " + description);
        setResult(RESULT_OK, intent);
        finish();
    }
}

号令天下:结论

Fragment是Android中布局的强大工具,提供灵活性和模块化的布局方案。通过理解Fragment的生命周期、数据传递机制以及使用startActivityForResult和onActivityResult进行通信,你可以创建功能强大且易于维护的应用程序。将Fragment视为你手下的点将台,精心调配它们的力量,你将在Android开发战场上所向披靡!