我可以将逻辑放在不同的文件中来处理片段文件吗? Android Studio

时间:2016-10-10 05:16:05

标签: android listview android-fragments

所以我有一个项目,其中包含选项卡式活动,其中包含每个选项卡上的listViews

标签1 - 用于浏览标题 选项卡2 - 用于浏览用户单击的标题

我分别放了每个片段的onCreateView方法。

public class ChatHistory extends Fragment {
    private ListView mThreadList;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        //Returning the layout file after inflating
        return inflater.inflate(R.layout.fragment_chat_history, container, false);

    }
}

在每个选项卡上我想添加方法来将数据从firebase调用到每个片段中的列表视图。

我想知道的是,我应该在哪里放置每个片段的逻辑,以便它可以处理数据输入输出?我该怎么说呢。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

FragmentActivity有类似的生命周期流程。考虑到这一点,放置初始化逻辑的最佳位置是在这些方法中:

  • onCreate()
  • onCreateView()

现在,人们会认为onCreateView()更为可取,因为Android应用程序中的初始化逻辑大部分时间都围绕着UI组件。虽然Activity中的onCreate() - 不同,但您无法保证对其有任何访问权。

从这里开始,您可以稍微修改onCreateView(),使其看起来像这样:

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_chat_history, container, false);

        // Step 1: Initialize your views (do those nasty findViewById's here).
        mThreadList = (ListView) view.findViewById(R.id.your_listview_id);

        // Step 2: Do your logic of loading the required data here.
        // …

        return view;
    }

但请记住,在执行Step 2时不要过度负担UI线程。否则,您可能会触发ANR对话框。

p.s。 ,我的回答似乎过于宽泛,但那是因为您的问题是。如果您可以尝试缩小问题范围,我可以提供更好的答案。 :)

答案 1 :(得分:0)

  

如果你的所有片段都从firebase中检索数据。最好创建一个baseFragment并将所有逻辑放在一起,并从你想要的任何一个片段中调用它。

因此它在每个片段中使用s amelayout,相同设计和相同的mThreadList。

    public abstract class BaseFragment extends Fragment{
    public abstract List<YourModelClass> methodToFetchDataFromFireBase(Param 1,Param 2..)//whatever your params are
    private ListView mThreadList;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        //Returning the layout file after inflating
        return inflater.inflate(R.layout.fragment_chat_history, container, false);
   }

    @Override
    public void onViewCreated(final View view, Bundle savedInstanceState) {
         List<YourModelClass> anyList = methodToFetchDataFromFireBase();
         mThreadList.setAdapter(getActivity,anyList );
    }

现在,每个片段只需extendsBaseFragment。无需使用onCreateView方法。只需添加onViewCreated并调用方法

即可