package com.gracecode.iZhihu.fragment; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; import android.view.View; import android.widget.AdapterView; import com.gracecode.iZhihu.activity.Detail; import com.gracecode.iZhihu.adapter.QuestionsAdapter; import com.gracecode.iZhihu.dao.Question; import com.gracecode.iZhihu.db.QuestionsDatabase; import com.gracecode.iZhihu.util.Helper; import com.handmark.pulltorefresh.extras.listfragment.PullToRefreshListFragment; import com.handmark.pulltorefresh.library.PullToRefreshBase; import com.handmark.pulltorefresh.library.PullToRefreshListView; import java.util.ArrayList; public abstract class BaseListFragment extends PullToRefreshListFragment implements AdapterView.OnItemClickListener { public static final String SAVED_QUESTIONS = "savedQuestions"; Context mContext; QuestionsAdapter mQuestionsAdapter; private Activity mActivity; QuestionsDatabase mQuestionsDatabase; ArrayList<Question> mQuestions; SharedPreferences mSharedPreferences; protected PullToRefreshListView mPull2RefreshView; BaseListFragment() { super(); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.mActivity = getActivity(); this.mContext = mActivity.getApplicationContext(); this.mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext); // @todo 初始化数据库 this.mQuestionsDatabase = new QuestionsDatabase(mContext); if (savedInstanceState != null) { this.mQuestions = savedInstanceState.getParcelableArrayList(SAVED_QUESTIONS); } if (this.mQuestions == null || this.mQuestions.size() <= 0) { this.mQuestions = getInitialData(); } this.mQuestionsAdapter = new QuestionsAdapter(getActivity(), mQuestions); } @Override public void onSaveInstanceState(Bundle outState) { if (mQuestions != null && mQuestions.size() > 0) { outState.putParcelableArrayList(SAVED_QUESTIONS, mQuestions); } super.onSaveInstanceState(outState); } @Override public void onStart() { super.onStart(); // 默认关闭下拉 mPull2RefreshView.setMode(PullToRefreshBase.Mode.DISABLED); } @Override public void onActivityCreated(Bundle savedInstanceState) { setListAdapter(mQuestionsAdapter); // 下拉 ListView 控件 this.mPull2RefreshView = getPullToRefreshListView(); getListView().setOnItemClickListener(this); super.onActivityCreated(savedInstanceState); } /** * Initial Data * * @return An Empty ArrayList By Default. */ ArrayList<Question> getInitialData() { return new ArrayList<Question>(); } @Override public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { // Android-PullToRefresh 似乎增加了个不可见条目,所以要 -1 int selectedPosition = (mPull2RefreshView != null) ? position - 1 : position; Helper.startDetailActivity(getActivity(), mQuestions, selectedPosition); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == Intent.FILL_IN_PACKAGE) { mQuestions = data.getParcelableArrayListExtra(Detail.INTENT_MODIFIED_LISTS); } super.onActivityResult(requestCode, resultCode, data); } /** * notifyDataSetChanged by manually */ public void notifyDataSetChanged() { if (mQuestionsAdapter != null) { mQuestionsAdapter.notifyDataSetChanged(); } } /** * Set Questions * * @param mQuestions */ public void setQuestions(ArrayList<Question> mQuestions) { this.mQuestions = mQuestions; } /** * Get Recent Questions By Update Time. * * @return mQuestions */ public ArrayList<Question> getRecentQuestion() { return mQuestionsDatabase.getRecentQuestions(); } /** * Get Stared Questions. * * @return mQuestions */ public ArrayList<Question> getStaredQuestions() { return mQuestionsDatabase.getStaredQuestions(); } @Override public void onDestroy() { mQuestionsDatabase.close(); super.onDestroy(); } }