package org.aisen.weibo.sina.ui.fragment.secondgroups; import android.content.DialogInterface; import android.os.Bundle; import android.support.v7.widget.CardView; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.umeng.analytics.MobclickAgent; import org.aisen.android.common.utils.SystemUtils; import org.aisen.android.common.utils.Utils; import org.aisen.android.component.bitmaploader.BitmapLoader; import org.aisen.android.component.bitmaploader.core.ImageConfig; import org.aisen.android.network.task.TaskException; import org.aisen.android.support.inject.ViewInject; import org.aisen.android.support.paging.IPaging; import org.aisen.android.ui.fragment.ATabsFragment; import org.aisen.android.ui.fragment.AWaterfallSwipeRefreshFragment; import org.aisen.android.ui.fragment.adapter.ARecycleViewItemView; import org.aisen.android.ui.fragment.itemview.IITemView; import org.aisen.android.ui.fragment.itemview.IItemViewCreator; import org.aisen.android.ui.widget.pla.PLAAdapterView; import org.aisen.weibo.sina.R; import org.aisen.weibo.sina.base.AppSettings; import org.aisen.weibo.sina.sinasdk.bean.PicUrls; import org.aisen.weibo.sina.sinasdk.bean.StatusContent; import org.aisen.weibo.sina.support.bean.JokeBean; import org.aisen.weibo.sina.support.bean.JokeBeans; import org.aisen.weibo.sina.support.paging.JokePaging; import org.aisen.weibo.sina.support.sdk.SDK; import org.aisen.weibo.sina.support.utils.AisenUtils; import org.aisen.weibo.sina.ui.activity.picture.PicsActivity; import java.util.List; /** * 0:纯文 1:图文 * * Created by wangdan on 16/3/14. */ public class JokesFragment extends AWaterfallSwipeRefreshFragment<JokeBean, JokeBeans> implements ATabsFragment.ITabInitData { final static int[] themeColorArr = { R.color.md_red_700, R.color.md_pink_700, R.color.md_purple_700, R.color.md_deep_purple_700, R.color.md_indigo_700, R.color.md_blue_700, R.color.md_light_blue_700, R.color.md_cyan_700, R.color.md_teal_700, R.color.md_green_700, R.color.md_light_green_700, R.color.md_lime_700, R.color.md_orange_700, R.color.md_deep_orange_700, R.color.md_brown_700, R.color.md_grey_700, R.color.md_blue_grey_700 }; public static JokesFragment newInstance(int type) { Bundle args = new Bundle(); args.putInt("type", type); JokesFragment fragment = new JokesFragment(); fragment.setArguments(args); return fragment; } private int type; @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); type = savedInstanceState == null ? getArguments().getInt("type", 0) : savedInstanceState.getInt("type", 0); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt("type", type); } @Override protected void layoutInit(LayoutInflater inflater, Bundle savedInstanceSate) { super.layoutInit(inflater, savedInstanceSate); setViewPadding(getContentView()); } private void setViewPadding(View viewGroup) { viewGroup.setPadding(viewGroup.getPaddingLeft(), viewGroup.getPaddingTop(), viewGroup.getPaddingRight(), Utils.dip2px(getActivity(), 56)); } @Override public void onItemClick(PLAAdapterView<?> parent, View view, int position, long id) { super.onItemClick(parent, view, position, id); final JokeBean bean = getAdapterItems().get(position); // 纯文 if (bean.getItemType() == 0) { AisenUtils.showMenuDialog(this, view, getResources().getStringArray(R.array.jokes_menu), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (which == 0) { MobclickAgent.onEvent(getActivity(), "joke_text_copy"); AisenUtils.copyToClipboard(bean.getExcerpt()); } else if (which == 1) { MobclickAgent.onEvent(getActivity(), "joke_text_share"); startActivity(Utils.getShareIntent("", bean.getExcerpt(), "")); } } }); } // 图文 else if (bean.getItemType() == 1) { StatusContent statusContent = new StatusContent(); PicUrls picUrls = new PicUrls(); picUrls.setThumbnail_pic(bean.getImgUrl()); statusContent.setText(bean.getExcerpt()); statusContent.setPic_urls(new PicUrls[]{ picUrls }); PicsActivity.launch(getActivity(), statusContent, 0); } } @Override protected void setupRefreshView(Bundle savedInstanceSate) { super.setupRefreshView(savedInstanceSate); int padding = Utils.dip2px(getActivity(), 4); getRefreshView().setPadding(padding, 0, padding, 0); } @Override protected IPaging<JokeBean, JokeBeans> newPaging() { return new JokePaging(); } @Override public void requestData(RefreshMode mode) { boolean load = true; // 如果还没有加载过数据,切且显示的是当前的页面 if (getTaskCount(PAGING_TASK_ID) == 0) { load = AisenUtils.checkTabsFragmentCanRequestData(this); } if (load) { if (mode == RefreshMode.refresh) { mode = RefreshMode.reset; } new JokeTask(mode).execute(); } } @Override public void onTabRequestData() { // 如果还没有加载过数据,就开始加载 if (getTaskCount(PAGING_TASK_ID) == 0) { requestData(RefreshMode.reset); } } @Override public IItemViewCreator<JokeBean> configItemViewCreator() { return new IItemViewCreator<JokeBean>() { @Override public View newContentView(LayoutInflater inflater, ViewGroup parent, int viewType) { if (viewType == 0) { return inflater.inflate(R.layout.item_joke_text, parent, false); } else if (viewType == 1) { return inflater.inflate(R.layout.item_joke_image, parent, false); } return null; } @Override public IITemView<JokeBean> newItemView(View convertView, int viewType) { if (viewType == 0) { return new JokeTextItemView(convertView); } else if (viewType == 1) { return new JokeImageItemView(convertView); } return null; } }; } class JokeTextItemView extends ARecycleViewItemView<JokeBean> { @ViewInject(id = R.id.txtJoke) TextView txtJoke; @ViewInject(id = R.id.cardView) CardView cardView; public JokeTextItemView(View itemView) { super(getActivity(), itemView); } @Override public void onBindData(View convertView, JokeBean data, int position) { txtJoke.setText(data.getExcerpt() + ""); setCardViewBackground(data); } void setCardViewBackground(JokeBean data) { int color = themeColorArr[(int) (data.getId() % themeColorArr.length)]; cardView.setCardBackgroundColor(getResources().getColor(color)); } } class JokeImageItemView extends JokeTextItemView { @ViewInject(id = R.id.img) ImageView img; int width; public JokeImageItemView(View itemView) { super(itemView); width = (SystemUtils.getScreenWidth(getActivity()) - Utils.dip2px(getActivity(), 8) * 3) / 2; } @Override public void onBindData(View convertView, JokeBean data, int position) { super.onBindData(convertView, data, position); int imageW = data.getImgWidth(); int imageH = data.getImgHeight(); int height = width * imageH / imageW; img.setLayoutParams(new LinearLayout.LayoutParams(width, height)); ImageConfig config = new ImageConfig(); config.setId("Jokes"); config.setMaxWidth(width); config.setLoadfaildRes(R.drawable.bg_timeline_loading); config.setLoadingRes(R.drawable.bg_timeline_loading); BitmapLoader.getInstance().display(JokesFragment.this, data.getImgUrl(), img, config); } @Override void setCardViewBackground(JokeBean data) { } } class JokeTask extends APagingTask<Void, Void, JokeBeans> { public JokeTask(RefreshMode mode) { super(mode); } @Override protected List<JokeBean> parseResult(JokeBeans jokeBeans) { return jokeBeans.getData().getContents(); } @Override protected JokeBeans workInBackground(RefreshMode mode, String previousPage, String nextPage, Void... params) throws TaskException { long newsid = 0; String direction = "up"; // 下拉刷新 if (mode == RefreshMode.refresh) { direction = "down"; if (!TextUtils.isEmpty(previousPage)) newsid = Long.parseLong(previousPage); } // 上拉刷新 else if (mode == RefreshMode.update) { direction = "up"; if (!TextUtils.isEmpty(nextPage)) newsid = Long.parseLong(nextPage); } JokeBeans beans = SDK.newInstance(getTaskCacheMode(this)).getJokes(newsid, direction, 20, type); if (beans != null && beans.getData() != null && beans.getData().getContents() != null) { for (JokeBean jokeBean : beans.getData().getContents()) { jokeBean.setItemType(type); } } if (mode == RefreshMode.update && beans.getData().getContents().size() == 0) { beans.setEndPaging(true); } return beans; } } @Override public boolean onToolbarDoubleClick() { if (AisenUtils.checkTabsFragmentCanRequestData(this)) { requestDataDelaySetRefreshing(AppSettings.REQUEST_DATA_DELAY); getRefreshView().setSelectionFromTop(0, 0); return true; } return false; } }