我正在爲我的android考試做一個Reddit應用程序,我對繼承有一個疑問。圍繞繼承自定義片段的最佳做法是什麼
我有一個片段誰有一個RecyclerView。 recyclerview包含一個redditposts列表。我的應用程序包含多個subreddits(有趣,遊戲,新聞等)。每個subreddit都有自己的片段。我有一些每個片段都必須具備的方法。 (一個showProgressBar,hideProgressBar,populateResult等)我認爲這將是簡單的,如果我只是做一個片段類的所有subreddit碎片可以繼承。我可以將所有方法放入該片段類中,因爲每個子片段片段的方法都是相同的。但是我的講師說這是對繼承的不好用。那麼有沒有人有圍繞這個問題的最佳做法?
這是我正在談論的片段: package com.example.thomas.redditapp;
public class FunnyFragment extends Fragment {
private OnListFragmentInteractionListener mListener;
@Bind(R.id.funny_recyclerview)
RecyclerView mRecyclerView;
@Bind(R.id.progressBarFetch)
ProgressBar progress;
private RedditHelper helper;
private RedditPostRecyclerViewAdapter mAdapter;
List<RedditPost> redditPosts;
public FunnyFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
helper = null;
helper = new RedditHelper(SubRedditEnum.funny, this);
redditPosts = new ArrayList<>();
startLoad();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_funny_list, container, false);
ButterKnife.bind(this, view);
showProgressBar();
mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
mAdapter = new RedditPostRecyclerViewAdapter(redditPosts, mListener, mRecyclerView);
mAdapter.setOnLoadMoreListener(new OnLoadMoreListener() {
@Override
public void onLoadMore() {
redditPosts.add(null);
helper.loadListFromUrl();
}
});
mRecyclerView.setAdapter(mAdapter);
return view;
}
protected void startLoad() {
if (helper != null) {
helper.loadListFromDb();
}
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
if (isTaskRunning()) {
showProgressBar();
} else {
hideProgressBar();
}
super.onActivityCreated(savedInstanceState);
}
public void hideProgressBar() {
progress.setVisibility(View.GONE);
}
public void showProgressBar() {
progress.setVisibility(View.VISIBLE);
progress.setIndeterminate(true);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof OnListFragmentInteractionListener) {
mListener = (OnListFragmentInteractionListener) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement OnListFragmentInteractionListener");
}
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
public void populateResult(List<RedditPost> result) {
if(!redditPosts.isEmpty()){
redditPosts.remove(redditPosts.size() - 1);
}
redditPosts.addAll(result);
mAdapter.setLoaded();
mAdapter.notifyDataSetChanged();
}
protected boolean isTaskRunning() {
if (helper == null) {
return false;
} else if (helper.getStatus() == 0) {
return false;
} else {
return true;
}
}
}
我在幫助程序類中調用hideProgressBar(),showProgressBar()和populateResult()。
我知道,在我的情況下,我可以構建1片段,但我想要一個答案,我可以在未來使用我的下一個版本,並且您提供了我,謝謝! –
我很高興能幫上忙。你介意接受我的回答嗎? – freddig