package com.mcxiaoke.minicat.fragment; import android.content.Loader; import android.database.Cursor; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.CursorAdapter; import android.widget.ListView; import com.mcxiaoke.minicat.AppContext; import com.mcxiaoke.minicat.adapter.ConversationCursorAdapter; import com.mcxiaoke.minicat.api.Paging; import com.mcxiaoke.minicat.controller.DataController; import com.mcxiaoke.minicat.dao.model.DirectMessageModel; import com.mcxiaoke.minicat.service.SyncService; import com.mcxiaoke.minicat.util.Utils; /** * @author mcxiaoke * @version 1.3 2012.03.23 */ public class ConversationFragment extends SwipeRefreshListFragment { private static final String TAG = ConversationFragment.class .getSimpleName(); private String userId; private String screenName; public static ConversationFragment newInstance(String id, String screenName) { return newInstance(id, screenName, false); } public static ConversationFragment newInstance(String id, String screenName, boolean refresh) { Bundle args = new Bundle(); args.putString("id", id); args.putString("screen_name", screenName); args.putBoolean("refresh", refresh); ConversationFragment fragment = new ConversationFragment(); fragment.setArguments(args); if (AppContext.DEBUG) { Log.d(TAG, "newInstance() " + fragment + " id=" + id); } return fragment; } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { } @Override public Loader<Cursor> onCreateLoader(int id, Bundle args) { if (AppContext.DEBUG) { Log.d(TAG, "onCreateLoader() userId=" + userId); } return DataController.getConversationLoader(getActivity(), userId); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (AppContext.DEBUG) { Log.d(TAG, "onCreate() userId=" + userId); } } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // getListView().setStackFromBottom(true); getListView().setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL); } @Override protected void parseArguments(Bundle args) { userId = args.getString("id"); screenName = args.getString("screen_name"); } @Override protected CursorAdapter onCreateAdapter() { if (AppContext.DEBUG) { Log.d(TAG, "createAdapter()"); } return new ConversationCursorAdapter(getActivity()); } @Override protected void doFetch(boolean doGetMore) { final ResultHandler handler = new ResultHandler(this); final Cursor cursor = getCursor(); Paging p = new Paging(); // 对于私信对话界面来说,最上面的为最旧的,最下面的为最新的 if (doGetMore) { // 底部上拉获取最新的,需要sinceId p.sinceId = Utils.getMaxId(cursor); } else { // 顶部下拉是获取更旧的,需要maxId; p.maxId = Utils.getSinceId(cursor); } SyncService.getConversation(getActivity(), handler, p, userId); } @Override protected int getType() { return DirectMessageModel.TYPE_CONVERSATION_LIST; } @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { return true; } @Override public String getTitle() { return screenName; } }