为了账号安全,请及时绑定邮箱和手机立即绑定

将 Activity 转换为 Fragment

将 Activity 转换为 Fragment

FFIVE 2021-11-24 15:43:10
我是 Android 新手,我正在尝试将其Activity变成一个,Fragment但我不知道如何解决错误。当我将其更改为 a 时,Fragment我会收到很多红色代码setContentView、findViewById、 和getMenuInflater。我知道这些可能是红色的,因为它们是用来做Activities什么的,但我不确定它们要改成什么。    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);    }}
查看完整描述

1 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

设置内容视图()

Fragments 中没有这样的方法。相反,您覆盖onCreateView()并从中返回一些视图。您可以使用传入的内容来LayoutInflater扩大您通常传递给 的布局 ID setContentView(),然后将其返回。


findViewById()

片段没有findViewById()方法。但是,在onCreateView()返回后的任何时间,您都可以改用getView().findViewById(). 在里面onCreateView(),如果你命名你的膨胀视图,root你可以调用root.findViewById(). 在 之前onCreateView(),无法查找任何视图(因为它们尚未膨胀)。


getMenuInflater()

片段使用不同的签名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);

    }

}


查看完整回答
反对 回复 2021-11-24
  • 1 回答
  • 0 关注
  • 279 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信