📜  Android-片段(1)

📅  最后修改于: 2023-12-03 15:29:22.493000             🧑  作者: Mango

Android 片段

Android 片段 (Fragment) 是一种组件,可用于在应用程序的用户界面 (UI) 中插入可重用的模块化部分。例如,如果您正在开发一个类似于 Twitter 的应用程序,则可能使用 Android 片段来表示用户的时间轴、设置和个人资料。在本文中,我们将介绍有关 Android 片段的一些基础知识和一些最佳实践。

如何创建一个 Android 片段

要创建 Android 片段,只需在您的 Android 项目中创建一个新的 Java 类。然后,您可以使用以下方法之一将其转换为片段:

  1. 继承 android.app.Fragment 类。这是 Android 3.0 及更早版本的标准方法。
  2. 继承 android.support.v4.app.Fragment 类。这是 Android 支持库中运行的更早版本的标准方法。
  3. 在 Android 3.0 及更高版本中使用 android.app.Fragment 并在支持库中使用 android.support.v4.app.Fragment。这是最常见的方法,因为它可以确保您的应用程序向后兼容到 Android 2.1。

以下是一个将 Java 类转换为片段的示例:

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

public class myFragment extends Fragment {

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.my_fragment_layout, container, false);
    }
}
如何将一个 Android 片段添加到一个活动

要将一个 Android 片段添加到一个活动,您可以使用以下方法:

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.fragment_container, new myFragment()).commit();

可以将片段添加到一个 ViewGroup 中,如以下布局文件:

<LinearLayout
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" />
如何与 Android 片段通信

要与 Android 片段进行通信,您可以使用以下方法之一:

  1. 在片段中创建一个接口。将这个接口传递给包含该片段的活动。当需要从片段中发送消息时,它将使用此接口回调活动。
  2. 在活动中创建一个接口。将这个接口传递给包含该片段的活动。当需要从活动中发送消息时,它将使用此接口回调片段。

以下是一个使用第一种方法的示例:

public interface OnFragmentInteractionListener {
    void onFragmentInteraction(Uri uri);
}

public class myFragment extends Fragment {
    private OnFragmentInteractionListener mListener;

    // ...

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof OnFragmentInteractionListener) {
            mListener = (OnFragmentInteractionListener) context;
        } else {
            throw new RuntimeException(context.toString() + " must implement OnFragmentInteractionListener");
        }
    }

    // ...

    public void sendMessage() {
        if (mListener != null) {
            mListener.onFragmentInteraction(Uri.parse("message"));
        }
    }
}

public class MainActivity extends AppCompatActivity implements OnFragmentInteractionListener {

    @Override
    public void onFragmentInteraction(Uri uri) {
        Toast.makeText(this, "Message received from fragment", Toast.LENGTH_SHORT).show();
    }
}
如何保留 Android 片段的状态

当用户旋转设备时,Android 会销毁并重新创建您的活动和所有片段。为了确保您的片段在设备配置更改时不会丢失它们的状态,您可以覆盖 onSaveInstanceStateonCreate 方法。

以下是一个使用 onSaveInstanceStateonCreate 方法的示例:

public class myFragment extends Fragment {

    private int mCount = 0;

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

        if (savedInstanceState != null) {
            mCount = savedInstanceState.getInt("count", 0);
        }
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);

        outState.putInt("count", mCount);
    }

    public void increment() {
        mCount++;
    }

    public int getCount() {
        return mCount;
    }
}
如何重用 Android 片段

要重用 Android 片段,您可以将其添加到多个不同的活动中。您还可以将该片段转换为库模块,并将其包含在多个项目中。但是,请注意,一些片段可能仅适用于特定类型的活动,并且可能无法与其他活动一起使用。

结论

Android 片段是一个强大的组件,可用于构建模块化的应用程序。它们可以使您的代码更干净、更易于维护,并提供有关应用程序状态的更多信息。我们希望本文能帮助您开始使用 Android 片段,并为您提供了一些最佳实践。