Android 将当前的 Fragment 类转换为 Activity 类

标签 android android-fragments

我有一个 fragment 可以做一些与搜索 View 相关的事情,它运行良好,

但我想创建一个 Activity 来执行通常作为 fragment 的任务。

XML 没有问题,主要问题在 Java 代码中。 fragment 中的一些方法,我不知道它们在 Activity 中的对立面。

fragment 代码:

public class AirlineSearchFragment extends Fragment implements SearchView.OnQueryTextListener{
    private RecyclerView recyclerview;
    private List<AirlineData> airlinesDataModel;
    private AirlinesSearchViewAdapter adapter;

    public AirlineSearchFragment()
    {
        setHasOptionsMenu(true);

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

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        setHasOptionsMenu(true);

        View view = inflater.inflate(R.layout.airline_search_fragment, container, false);

        recyclerview = (RecyclerView) view.findViewById(R.id.recyclerview);
        LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
        recyclerview.setLayoutManager(layoutManager);
        return view;
    }


    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        setHasOptionsMenu(true);
        String[] locales = Locale.getISOCountries();
        airlinesDataModel = new ArrayList<>();
        airlinesDataModel.addAll(AirlinesCore.airlinesList);
        adapter = new AirlinesSearchViewAdapter(airlinesDataModel);
        recyclerview.setAdapter(adapter);
    }


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

        final MenuItem item = menu.findItem(R.id.action_search);
        final SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);
        searchView.setOnQueryTextListener(this);

        MenuItemCompat.setOnActionExpandListener(item,
                new MenuItemCompat.OnActionExpandListener() {
                    @Override
                    public boolean onMenuItemActionCollapse(MenuItem item) {
                        // Do something when collapsed
                        adapter.setFilter(airlinesDataModel);
                        return true; // Return true to collapse action view
                    }

                    @Override
                    public boolean onMenuItemActionExpand(MenuItem item) {
                        // Do something when expanded
                        return true; // Return true to expand action view
                    }
                });
    }

    @Override
    public boolean onQueryTextChange(String newText) {
        final List<AirlineData> filteredModelList = filter(airlinesDataModel, newText);
        adapter.setFilter(filteredModelList);
        return true;
    }

    @Override
    public boolean onQueryTextSubmit(String query) {
        return false;
    }

    private List<AirlineData> filter(List<AirlineData> models, String query) {
        query = query.toLowerCase();

        final List<AirlineData> filteredModelList = new ArrayList<>();
        for (AirlineData model : models) {
            if(model.arabicName==null)
            {
                model.arabicName="";
            }
            if(model.shortName==null)
            {
                model.shortName="";
            }
            if(model.name==null)
            {
                model.name="";
            }
            final String text = model.name.toLowerCase()+model.shortName.toLowerCase()
                    +model.arabicName.toLowerCase()+model.code.toLowerCase();
            if (text.contains(query)) {
                filteredModelList.add(model);
            }
        }
        return filteredModelList;
    }


}

我的 Activity 使用从 fragment 复制的一些方法(我应该添加什么?):

public class AirlinesSearchActivity extends AppCompatActivity implements SearchView.OnQueryTextListener{

    private RecyclerView recyclerview;
    private List<AirlineData> airlinesDataModel;
    private AirlinesSearchViewAdapter adapter;

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

    }

    @Override
    public boolean onQueryTextChange(String newText) {
        final List<AirlineData> filteredModelList = filter(airlinesDataModel, newText);
        adapter.setFilter(filteredModelList);
        return true;
    }
    @Override
    public boolean onQueryTextSubmit(String query) {
        return false;
    }
    private List<AirlineData> filter(List<AirlineData> models, String query) {
        query = query.toLowerCase();

        final List<AirlineData> filteredModelList = new ArrayList<>();
        for (AirlineData model : models) {
            if(model.arabicName==null)
            {
                model.arabicName="";
            }
            if(model.shortName==null)
            {
                model.shortName="";
            }
            if(model.name==null)
            {
                model.name="";
            }
            final String text = model.name.toLowerCase()+model.shortName.toLowerCase()
                    +model.arabicName.toLowerCase()+model.code.toLowerCase();
            if (text.contains(query)) {
                filteredModelList.add(model);
            }
        }
        return filteredModelList;
    }
}

最佳答案

尝试将 onCreateViewonViewCreated 中的逻辑移动到 Activity.onCreate()

然后覆盖 Activity 中的 onCreateOptionsMenu 并复制 Fragment 中的逻辑

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

相关文章:

android - 在方向更改时从双 Pane 切换到单 Pane 以维护 fragment 堆栈

android - 如何在 Canvas 上重新开始?

android - 如何在另一个 Activity 中调用方法

Android studio - 无法从文件 app.iml 加载设置,文件不存在?

android - 用包含 viewpager 的 fragment 替换 fragment 时崩溃

java - 我想将放入 fragment 的 args 包中的 ArrayList<Integer> 转换为类型 Integer[] 以用于其他方法?

android - FrameLayout 内的 FAB 位于 fragment 之上

android - TabListener、ActionBarSherlock Fragment 和 ListFragment、PageAdapter 的混合?一团糟

android - 大布局影响 Galaxy Note

android - 访问 MediaPlayer 中的音频缓冲区