package org.aisen.weibo.sina.ui.fragment.publish; import android.animation.LayoutTransition; import android.animation.ObjectAnimator; import android.app.Activity; import android.content.ClipData; import android.content.ClipData.Item; import android.content.ClipboardManager; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.Bitmap.CompressFormat; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.text.Editable; import android.text.InputFilter; import android.text.Spannable; import android.text.SpannableString; import android.text.Spanned; import android.text.TextUtils; import android.text.TextWatcher; import android.text.style.ImageSpan; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.widget.CheckBox; import android.widget.EditText; import android.widget.HorizontalScrollView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.afollestad.materialdialogs.AlertDialogWrapper; import org.aisen.android.common.context.GlobalContext; import org.aisen.android.common.utils.ActivityHelper; import org.aisen.android.common.utils.BitmapUtil; import org.aisen.android.common.utils.FileUtils; import org.aisen.android.common.utils.Logger; import org.aisen.android.common.utils.PhotoChoice; 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.BitmapDecoder; import org.aisen.android.component.bitmaploader.core.ImageConfig; import org.aisen.android.component.bitmaploader.download.ContentProviderDownloader; import org.aisen.android.component.bitmaploader.download.DownloadProcess; import org.aisen.android.component.bitmaploader.download.SdcardDownloader; import org.aisen.android.network.http.Params; import org.aisen.android.network.task.TaskException; import org.aisen.android.network.task.WorkTask; import org.aisen.android.support.action.IAction; import org.aisen.android.support.inject.ViewInject; import org.aisen.android.ui.activity.basic.BaseActivity; import org.aisen.android.ui.fragment.ABaseFragment; import org.aisen.weibo.sina.R; import org.aisen.weibo.sina.base.AppContext; import org.aisen.weibo.sina.base.AppSettings; import org.aisen.weibo.sina.service.PublishService; import org.aisen.weibo.sina.sinasdk.bean.WeiBoUser; import org.aisen.weibo.sina.support.bean.Emotion; import org.aisen.weibo.sina.support.bean.PublishBean; import org.aisen.weibo.sina.support.bean.PublishBean.PublishStatus; import org.aisen.weibo.sina.support.compress.TimelineBitmapCompress; import org.aisen.weibo.sina.support.permissions.SdcardPermissionAction; import org.aisen.weibo.sina.support.sqlit.EmotionsDB; import org.aisen.weibo.sina.support.sqlit.PublishDB; import org.aisen.weibo.sina.support.utils.AisenUtils; import org.aisen.weibo.sina.ui.fragment.picturepick.PicturePickFragment; import org.aisen.weibo.sina.ui.fragment.publish.EmotionFragment.OnEmotionSelectedListener; import java.io.ByteArrayOutputStream; import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.List; public abstract class APublishFragment extends ABaseFragment implements OnEmotionSelectedListener, PhotoChoice.PhotoChoiceListener { public static final String TAG = "Publish"; public static final int MAX_STATUS_LENGTH = 140; @ViewInject(id = R.id.layBtns) View layBtns; @ViewInject(id = R.id.btnLocation, click = "loadGPSLocation") View btnLocation; @ViewInject(id = R.id.btnCamera, click = "getPicture") View btnCamera; @ViewInject(id = R.id.btnEmotion, click = "switchEmotionSoftinput") View btnEmotion; @ViewInject(id = R.id.btnMention, click = "getFriend") View btnMention; @ViewInject(id = R.id.btnTrends, click = "insertTrends") View btnTrends; @ViewInject(id = R.id.btnOverflow, click = "popOverflowMenu") View btnOverflow; @ViewInject(id = R.id.btnSend, click = "sendContent") View btnSend; @ViewInject(id = R.id.layContainer) View layContainer; @ViewInject(id = R.id.layRoot) ViewGroup layRoot; @ViewInject(id = R.id.txtErrorHint) TextView txtErrorHint; @ViewInject(id = R.id.editContent) EditText editContent; @ViewInject(id = R.id.imgBk) ImageView picShow; @ViewInject(id = R.id.layImageCover) View layImageCover; @ViewInject(id = R.id.layEmotion) View layEmotion; @ViewInject(id = R.id.txtContentSurplus) TextView txtContentSurplus; @ViewInject(id = R.id.checkbox) CheckBox checkBox; @ViewInject(id = R.id.txtContent) TextView txtContent; // 支持多图 @ViewInject(id = R.id.layPicContainer) LinearLayout layPicContainer; @ViewInject(id = R.id.scrollPicContainer) HorizontalScrollView scrollPicContainer; private final LayoutTransition transitioner = new LayoutTransition(); private EmotionFragment emotionFragment; private PhotoChoice photoChoice; private PublishBean mBean; private int emotionHeight; private String tempFilePath; @Override protected void layoutInit(LayoutInflater inflater, Bundle savedInstanceState) { super.layoutInit(inflater, savedInstanceState); // getActivity().getActionBar().setSubtitle(AppContext.getUser().getScreen_name()); btnLocation.setVisibility(View.GONE); if (savedInstanceState == null) { if (getArguments() != null) mBean = (PublishBean) getArguments().getSerializable("bean"); } else { mBean = (PublishBean) savedInstanceState.getSerializable("bean"); } if (mBean == null) mBean = newPublishBean(); if (savedInstanceState == null) { emotionFragment = EmotionFragment.newInstance(); getActivity().getFragmentManager().beginTransaction().add(R.id.layEmotion, emotionFragment, "EmotionFragemnt").commit(); } else { emotionFragment = (EmotionFragment) getActivity().getFragmentManager().findFragmentByTag("EmotionFragemnt"); } emotionFragment.setOnEmotionListener(this); // 内容编辑 editContent.addTextChangedListener(editContentWatcher); // 更换表情 editContent.setFilters(new InputFilter[] { emotionFilter }); editContent.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { hideEmotionView(true); } }); ObjectAnimator animIn = ObjectAnimator.ofFloat(null, "translationY", SystemUtils.getScreenHeight(getActivity()), emotionHeight). setDuration(transitioner.getDuration(LayoutTransition.APPEARING)); transitioner.setAnimator(LayoutTransition.APPEARING, animIn); ObjectAnimator animOut = ObjectAnimator.ofFloat(null, "translationY", emotionHeight, SystemUtils.getScreenHeight(getActivity())). setDuration(transitioner.getDuration(LayoutTransition.DISAPPEARING)); transitioner.setAnimator(LayoutTransition.DISAPPEARING, animOut); layRoot.setLayoutTransition(transitioner); refreshUI(); String albumPath = SystemUtils.getSdcardPath() + File.separator + "/DCIM/Camera/"; File albumFile = new File(albumPath); if (!albumFile.exists()) albumFile.mkdirs(); photoChoice = new PhotoChoice(getActivity(), APublishFragment.this, albumPath); if (savedInstanceState != null) tempFilePath = savedInstanceState.getString("tempFilePath"); photoChoice.setFileName(tempFilePath); photoChoice.setMode(PhotoChoice.PhotoChoiceMode.uriType); } // 如果有照片了,也显示黑色文字 protected boolean configWhite() { return getPublishBean().getExtras() != null && getPublishBean().getPics() != null && getPublishBean().getPics().length > 0; } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putSerializable("bean", mBean); if (!TextUtils.isEmpty(tempFilePath)) outState.putString("tempFilePath", tempFilePath); } /** * 刷新视图 */ void refreshUI() { if (getPublishBean() == null) return; PublishBean bean = getPublishBean(); // 显示图片 if (bean.getExtras() != null && (bean.getPics() != null || bean.getParams().containsKey("url"))) { String[] images = bean.getPics(); if (images == null) { images = new String[]{ bean.getParams().getParameter("url") }; } if (TextUtils.isEmpty(editContent.getText().toString().trim()) && TextUtils.isEmpty(getPublishBean().getText())) { // getPublishBean().setText(getString(R.string.publish_share_pic) + " "); } // 修改为支持多图 if (true) { layImageCover.setVisibility(View.GONE); picShow.setVisibility(View.GONE); } ImageConfig config = new ImageConfig(); config.setLoadfaildRes(R.drawable.bg_timeline_loading); config.setLoadingRes(R.drawable.bg_timeline_loading); config.setMaxWidth(SystemUtils.getScreenWidth(getActivity())); config.setMaxHeight(SystemUtils.getScreenHeight(getActivity()) / 2); config.setBitmapCompress(TimelineBitmapCompress.class); config.setProgress(new PublishDownloadProcess()); if (layPicContainer != null) { layPicContainer.removeAllViews(); scrollPicContainer.setVisibility(View.VISIBLE); } for (String path : images) { View itemView = View.inflate(getActivity(), R.layout.item_publish_pic, null); ImageView img = (ImageView) itemView.findViewById(R.id.img); itemView.setTag(path); itemView.setOnClickListener(onPictureClickListener); if (path.toString().startsWith("content://")) { Logger.v(TAG, "相册图片地址, path = " + path); config.setDownloaderClass(ContentProviderDownloader.class); } else if (path.toString().startsWith("http://") || path.toString().startsWith("https://")) { Logger.v(TAG, "网络图片地址, path = " + path); } else { path = path.toString().replace("file://", ""); Logger.v(TAG, "拍照图片地址, path = " + path); // 扫描文件 SystemUtils.scanPhoto(getActivity(), new File(path)); config.setDownloaderClass(SdcardDownloader.class); } BitmapLoader.getInstance().display(this, path, img, config); if (layPicContainer != null) { layPicContainer.addView(itemView, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)); } } } else { if (scrollPicContainer != null) scrollPicContainer.setVisibility(View.GONE); layImageCover.setVisibility(View.GONE); picShow.setVisibility(View.GONE); } // 文字内容 if (!TextUtils.isEmpty(bean.getText())) { editContent.setText(bean.getText()); // 如果是意见反馈,不默认将光标移动到最后 if (bean.getExtras() != null && bean.getExtras().containsKey("feedback")) ; else editContent.setSelection(editContent.getText().toString().length()); } } class PublishDownloadProcess extends DownloadProcess { @Override public void receiveLength(long length) { } @Override public void receiveProgress(long progressed) { } @Override public void prepareDownload(String url) { } @Override public void finishedDownload(byte[] bytes) { } @Override public void downloadFailed(Exception e) { getPublishBean().getExtras().remove("images"); String[] pics = getPublishBean().getPics(); List<String> picList = new ArrayList<String>(); for (String pic : pics) picList.add(pic); picList.remove(0); pics = picList.toArray(new String[0]); if (pics.length > 0) getPublishBean().setPics(pics); else getPublishBean().setPics(null); showMessage(R.string.publish_pic_none); } } // 暂时只支持删除,不支持预览 View.OnClickListener onPictureClickListener = new View.OnClickListener() { @Override public void onClick(View v) { final String path = v.getTag().toString(); new AlertDialogWrapper.Builder(getActivity()) .setMessage(R.string.publish_delete_pic) .setNegativeButton(R.string.cancel, null) .setPositiveButton(R.string.confirm, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { String[] pathArr = getPublishBean().getPics(); List<String> pathList = new ArrayList<String>(); Collections.addAll(pathList, pathArr); pathList.remove(path); getPublishBean().setPics(pathList.toArray(new String[0])); for (int i = 0; i < layPicContainer.getChildCount(); i++) { View view = layPicContainer.getChildAt(i); if (view.getTag().toString().equals(path)) { layPicContainer.removeView(view); break; } } if (getPublishBean().getPics() == null || getPublishBean().getPics().length == 0) { getPublishBean().setPics(null); scrollPicContainer.setVisibility(View.GONE); } } }) .show(); } }; protected void send() { if (AppSettings.isSendDelay()) getPublishBean().setDelay(AppSettings.getPublishDelay()); else getPublishBean().setDelay(0); PublishService.publish(getActivity(), getPublishBean()); getActivity().finish(); } @Override public void onEmotionSelected(Emotion emotion) { Editable editAble = editContent.getEditableText(); int start = editContent.getSelectionStart(); if ("[最右]".equals(emotion.getKey())) editAble.insert(start, "→_→"); else editAble.insert(start, emotion.getKey()); } /** * 微博内容监听,刷新提示信息 */ private TextWatcher editContentWatcher = new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // 设置长度提示 String content = editContent.getText().toString() + appendContent(); txtContentSurplus.setText((MAX_STATUS_LENGTH - AisenUtils.getStrLength(content)) + ""); if (AisenUtils.getStrLength(content) > MAX_STATUS_LENGTH) { txtErrorHint.setVisibility(View.VISIBLE); txtErrorHint.setText(String.format(getString(R.string.error_length_too_long), AisenUtils.getStrLength(content) - MAX_STATUS_LENGTH)); } else { txtErrorHint.setVisibility(View.GONE); } getPublishBean().setText(content); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { } }; /** * 输入文本的过滤,根据输入替换库中的表情 */ private InputFilter emotionFilter = new InputFilter() { @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { // 是delete直接返回 if ("".equals(source)) { return null; } byte[] emotionBytes = EmotionsDB.getEmotion(source.toString()); // 输入的表情字符存在,则替换成表情图片 if (emotionBytes != null) { byte[] data = emotionBytes; Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); int size = BaseActivity.getRunningActivity().getResources().getDimensionPixelSize(R.dimen.publish_emotion_size); bitmap = BitmapUtil.zoomBitmap(bitmap, size); SpannableString emotionSpanned = new SpannableString(source.toString()); ImageSpan span = new ImageSpan(getActivity(), bitmap); emotionSpanned.setSpan(span, 0, source.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); return emotionSpanned; } else { return source; } } }; protected String appendContent() { return ""; } /** * 插入图片 * * @param v */ void getPicture(View v) { // 已经有图片了 if (false && getPublishBean().getExtras() != null && (getPublishBean().getPics() != null && getPublishBean().getPics().length > 0) || getPublishBean().getParams().containsKey("url")) { new AlertDialogWrapper.Builder(getActivity()) .setItems(R.array.publish_pic_edit, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (which == 0) { showGetPictureDialog(); } else { getPublishBean().setPics(null); // getPublishBean().getExtras().remove("images"); getPublishBean().getParams().remove("url"); refreshUI(); } } }) .show(); } else { showGetPictureDialog(); } } private void showGetPictureDialog() { new IAction(getActivity(), new SdcardPermissionAction(((BaseActivity) getActivity()), null)) { @Override public void doAction() { new AlertDialogWrapper.Builder(getActivity()) .setItems(R.array.publish_pic, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { switch (which) { // 相册 case 0: String[] images = getPublishBean().getPics(); PicturePickFragment.launch(APublishFragment.this, 9, images, 3333); break; // 拍照 case 1: tempFilePath = String.format("%s.jpg", String.valueOf(System.currentTimeMillis() / 1000)); photoChoice.setFileName(tempFilePath); photoChoice.start(APublishFragment.this, 1); break; // 最后一次拍照 case 2: getLastPhoto(); break; // 来自剪切板 case 3: getPictureFromClipbroad(); break; default: break; } } }) .show(); } }.run(); } /** * 插入话题 * * @param v */ void insertTrends(View v) { Editable editAble = editContent.getEditableText(); int start = editContent.getSelectionStart(); editAble.insert(start, "##"); editContent.setSelection(editContent.getSelectionStart() - 1); } /** * 切换表情跟键盘 * * @param v */ void switchEmotionSoftinput(View v) { if (layEmotion.isShown()) { hideEmotionView(true); } else { showEmotionView(SystemUtils.isKeyBoardShow(getActivity())); } } private void hideEmotionView(boolean showKeyBoard) { if (layEmotion.isShown()) { if (showKeyBoard) { LinearLayout.LayoutParams localLayoutParams = (LinearLayout.LayoutParams) layContainer.getLayoutParams(); localLayoutParams.height = layEmotion.getTop(); localLayoutParams.weight = 0.0F; layEmotion.setVisibility(View.GONE); getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); SystemUtils.showKeyBoard(getActivity(), editContent); editContent.postDelayed(new Runnable() { @Override public void run() { unlockContainerHeightDelayed(); } }, 200L); } else { layEmotion.setVisibility(View.GONE); getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); unlockContainerHeightDelayed(); } } } private void showEmotionView(boolean showAnimation) { if (showAnimation) { transitioner.setDuration(200); } else { transitioner.setDuration(0); } int statusBarHeight = SystemUtils.getStatusBarHeight(getActivity()); emotionHeight = SystemUtils.getKeyboardHeight(getActivity()); SystemUtils.hideSoftInput(getActivity(), editContent); layEmotion.getLayoutParams().height = emotionHeight; layEmotion.setVisibility(View.VISIBLE); getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); // 2015 05-09 在5.0有navigationbar的手机,高度高了一个statusBar int lockHeight = SystemUtils.getAppContentHeight(getActivity()); // if (Build.VERSION.SDK_INT < 19) // lockHeight = lockHeight - statusBarHeight; lockContainerHeight(lockHeight); } private void lockContainerHeight(int paramInt) { LinearLayout.LayoutParams localLayoutParams = (LinearLayout.LayoutParams) layContainer.getLayoutParams(); localLayoutParams.height = paramInt; localLayoutParams.weight = 0.0F; } public void unlockContainerHeightDelayed() { ((LinearLayout.LayoutParams) layContainer.getLayoutParams()).weight = 1.0F; } void getFriend(View v) { AddFriendMentionFragment.launch(this, 1000); } @Override public boolean onHomeClick() { if (!TextUtils.isEmpty(getPublishBean().getText()) || getPublishBean().getPics() != null) { askSaveToDraft(); return true; } return super.onBackClick(); } @Override public boolean onBackClick() { if (layEmotion.isShown()) { hideEmotionView(false); return true; } else if (!TextUtils.isEmpty(getPublishBean().getText()) || getPublishBean().getPics() != null) { askSaveToDraft(); return true; } return super.onBackClick(); } private void askSaveToDraft() { new AlertDialogWrapper.Builder(getActivity()).setMessage(R.string.publish_draft_title) .setNegativeButton(R.string.no, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { getActivity().finish(); } }) .setPositiveButton(R.string.yes, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { getPublishBean().setStatus(PublishStatus.draft); PublishDB.addPublish(getPublishBean(), AppContext.getAccount().getUser()); getActivity().finish(); } }) .show(); } @Override public void choiceByte(byte[] datas) { } @Override public void choiceBitmap(Bitmap bitmap) { } @Override public void choieUri(Uri uri, int requestCode) { Logger.e(uri.toString()); // 当拍摄照片时,提示是否设置旋转90度 if (!AppSettings.isRotatePic() && !ActivityHelper.getBooleanShareData(GlobalContext.getInstance(), "RotatePicNoRemind", false)) { new AlertDialogWrapper.Builder(getActivity()).setTitle(R.string.remind) .setMessage(R.string.publish_rotate_remind) .setNegativeButton(R.string.donnot_remind, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ActivityHelper.putBooleanShareData(GlobalContext.getInstance(), "RotatePicNoRemind", true); } }) .setPositiveButton(R.string.i_know, null) .show(); } // 拍摄照片时,顺时针旋转90度 if (requestCode == PhotoChoice.CAMERA_IMAGE_REQUEST_CODE && AppSettings.isRotatePic()) { final String path = uri.toString().replace("file://", ""); new WorkTask<Void, Void, String>() { @Override public String workInBackground(Void... params) throws TaskException { try { Bitmap bitmap = BitmapDecoder.decodeSampledBitmapFromFile(path, SystemUtils.getScreenHeight(getActivity()), SystemUtils.getScreenHeight(getActivity())); bitmap = BitmapUtil.rotateBitmap(bitmap, 90); ByteArrayOutputStream outArray = new ByteArrayOutputStream(); bitmap.compress(CompressFormat.JPEG, 100, outArray); FileUtils.writeFile(new File(path), outArray.toByteArray()); } catch (OutOfMemoryError e) { e.printStackTrace(); } return path; } protected void onSuccess(String result) { setPicUri(result); } }.execute(); } else { setPicUri(uri.toString()); } } /** * 从剪切板获取链接 * */ private void getPictureFromClipbroad() { ClipboardManager cmb = (ClipboardManager) GlobalContext.getInstance().getSystemService(Context.CLIPBOARD_SERVICE); ClipData data = cmb.getPrimaryClip(); if (data != null && data.getItemCount() > 0) { Item item = data.getItemAt(0); CharSequence image = item.getText(); if (!TextUtils.isEmpty(image)) { if (image.toString().toLowerCase().endsWith(".gif") || image.toString().toLowerCase().endsWith(".jpg") || image.toString().toLowerCase().endsWith(".jpeg") || image.toString().toLowerCase().endsWith(".bmp") || image.toString().toLowerCase().endsWith(".png")) { getPublishBean().getParams().addParameter("url", image.toString()); refreshUI(); } else { showMessage(R.string.publish_clip_faild); } } else { showMessage(R.string.publish_clip_empty); } } else { showMessage(R.string.publish_clip_empty); } } private void setPicUri(String image) { Params extraParams = getPublishBean().getExtras(); if (extraParams == null) { extraParams = new Params(); getPublishBean().setExtras(extraParams); } String[] pics = getPublishBean().getPics(); if (pics != null) { List<String> list = new ArrayList<String>(); for (String pic : pics) { list.add(pic); } list.add(image); pics = list.toArray(new String[0]); } else { pics = new String[]{ image }; } getPublishBean().setPics(pics); // 刷新视图 refreshUI(); } @Override public void unChoice() { } private void getLastPhoto() { new WorkTask<Void, Void, String>() { @Override public String workInBackground(Void... params) throws TaskException { String path = ""; if (getActivity() != null) path = Utils.getLatestCameraPicture(getActivity()); return path; } @Override protected void onSuccess(String result) { super.onSuccess(result); if (!TextUtils.isEmpty(result)) { Logger.v(TAG, "最近拍摄照片, path = " + result); File file = new File(result); if (file.exists() && file.length() == 0) { showMessage(R.string.publish_get_recent_pic_faild); } else { choieUri(Uri.parse(result), PhotoChoice.PHONE_IMAGE_REQUEST_CODE); } } else { showMessage(R.string.publish_recent_pic_none); } } }.execute(); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 1000 && resultCode == Activity.RESULT_OK) { WeiBoUser user = (WeiBoUser) data.getSerializableExtra("bean"); Editable editAble = editContent.getEditableText(); int start = editContent.getSelectionStart(); editAble.insert(start, String.format("@%s ", user.getScreen_name())); } else if (requestCode == 3333 && resultCode == Activity.RESULT_OK) { if (data != null) { String[] pics = data.getStringArrayExtra("pics"); Logger.w(pics); if (pics != null) { getPublishBean().setPics(pics); refreshUI(); } } } else { if (photoChoice != null) photoChoice.onActivityResult(requestCode, resultCode, data); } } public PublishBean getPublishBean() { return mBean; } void sendContent(View v) { if (txtErrorHint.getVisibility() == View.VISIBLE) { showMessage(txtErrorHint.getText().toString()); return; } if (checkValid(getPublishBean())) send(); } /** * 空创建时,初始化Bean * * @return */ abstract PublishBean newPublishBean(); // abstract void popOverflowMenu(View v); abstract boolean checkValid(PublishBean bean); }