java - 将 Activity 转换为 Fragment

标签 java android android-activity fragment

我是 Android 新手,我正在尝试将此 Activity 转换为 Fragment,但我不知道如何解决错误。

当我将其更改为 Fragment 时,我收到很多红色代码 setContentViewfindViewByIdgetMenuInflater >。我知道这些可能是红色的,因为它们是用于 Activity ,但我不确定它们应该更改为什么。

    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.LinearLayoutManager;
    import android.support.v7.widget.RecyclerView;
    import android.view.Menu;
    import android.view.MenuItem;

    public class LocationsFragment extends Fragment {

    RecyclerView recyclerView;
    RecyclerView.LayoutManager layoutManager;
    RecyclerView.Adapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_card_demo);
        // Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        // setSupportActionBar(toolbar);

        recyclerView =
                (RecyclerView) findViewById(R.id.recycler_view);

        layoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);

        adapter = new RecyclerAdapter();
        recyclerView.setAdapter(adapter);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_card_demo, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

最佳答案

setContentView()

Fragments 中没有这样的方法。相反,您可以重写 onCreateView() 并从中返回一些 View 。您可以使用传入的 LayoutInflater 来扩充您通常传递给 setContentView() 的布局 ID,然后返回该 ID。

findViewById()

fragment 没有 findViewById() 方法。但是,在 onCreateView() 返回后,您可以随时使用 getView().findViewById()。在 onCreateView() 内,如果您将膨胀 View 命名为 root,则可以调用 root.findViewById()。在 onCreateView() 之前,无法查找任何 View (因为它们尚未膨胀)。

getMenuInflater()

fragment 对 onCreateOptionsMenu() 使用不同的签名。它看起来像这样:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    // ...
}

您可以使用传入的 MenuInflater 而不是调用 getMenuInflater()

<小时/>

将所有这些放在一起,这就是您所拥有的:

public class LocationsFragment extends Fragment {

    RecyclerView recyclerView;
    RecyclerView.LayoutManager layoutManager;
    RecyclerView.Adapter adapter;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View root = inflater.inflate(R.layout.activity_card_demo, container, false);

        recyclerView = (RecyclerView) root.findViewById(R.id.recycler_view);

        layoutManager = new LinearLayoutManager(getContext());
        recyclerView.setLayoutManager(layoutManager);

        adapter = new RecyclerAdapter();
        recyclerView.setAdapter(adapter);

        return root;
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.menu_card_demo, menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

关于java - 将 Activity 转换为 Fragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52865070/

相关文章:

Java midi播放质量不一致

android - 为什么它告诉我在我使用 android :text ="' ? 的任何地方使用 @string/而且它是硬编码的

android - Sugar ORM 没有这样的表异常

android - 在 Android Activity 之间高效地传递自定义对象数据 [Mono Android]

java - Android Studio TextView.text 不更新

swift - 作为全局属性的 Activity 指标

java - 从资源中读取 XML 文件

java - 间隔树实现在序列化后占用大量文件空间

java - OutOfMemoryError - 控制台中没有任何痕迹

java - 更改一个 ViewHolder 项目也会影响其他项目