實現了獲取用戶主頁微博之後,我們還需要實現查看詳細微博的功能。除微博常見的屬性外,如果微博中包含圖片,還要實現瀏覽大圖的功能。同時我們還需要實現轉發,評論等功能!今天我們就來實現上述功能。
詳細微博:
用戶點擊一個微博Item從微博主頁跳轉到微博詳細頁,跳轉的過程中我們要把微博(Status)數據傳遞到Activity中,在listview的setOnItemClickListener方法中添加如下代碼:
Bundle bundle = new Bundle();
Status status = listStatus.get(position);
bundle.putSerializable("status", status);
Intent intent = new Intent(HomeActivity.this, StatusDetail.class); //查看詳細微博
intent.putExtras(bundle);
startActivity(intent);
跳轉到StatusDetail類中,我們可以使用getIntent()來獲取微博數據(Status)。代碼如下:
Status status = (Status) getIntent().getSerializableExtra("status");
獲取到微博數據之後就簡單了。
接下來我們要實現,轉發的功能,只需要爲轉發按鈕設置一個監聽器然後調用weibo.retweetStatus(status.getId())方法即可,需要設置參數status_id:要轉發的微博Id。
發表評論與發表微博功能基本類似,這裏不再詳細介紹了,如有疑問可參考我的博文:新浪微博開發之發表微博功能的實現。
下面介紹實現瀏覽大圖的功能:
有了微博數據,我們就可以獲取大圖的地址status.getOriginal_pic();即原圖片地址。這裏我使用了對話框的形式,新建一個Dialog將試圖view設置爲圖片就可以了。代碼如下:
String imageUrl = status.getOriginal_pic();
if(!"".equals(imageUrl)){ //如果微博中包含圖片
this.findViewById(R.id.scale_layout).setVisibility(View.VISIBLE);
scaleImage = (ImageButton) findViewById(R.id.scale_btn);
scaleImage.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showOriginalImage(imageUrl); //放大圖片
}
});
setImage(imageUrl, picture);
picture.setVisibility(View.VISIBLE);
}
需要注意的是一定要先檢查微博中是否包含圖片,否則會報異常!
showOriginalImage(imageUrl)方法代碼:
/**
* 顯示大圖
* @param imageUrl
* 圖片地址
*/
private void showOriginalImage(String imageUrl) {
View view = View.inflate(StatusDetail.this, R.layout.show_original_image, null);
final AlertDialog dialog = new AlertDialog.Builder(StatusDetail.this)
.setView(view)
.create();
dialog.show();
ImageButton close = (ImageButton) view.findViewById(R.id.close_btn); //關閉查看大圖窗口
close.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
ImageView image = (ImageView) view.findViewById(R.id.originalImage);
setImage(imageUrl, image); //設置大圖
}
整體的過程大致就是這樣,效果圖如下:
詳細代碼如下:
package com.cloay.weibo.ui;
import weibo4android.Comment;
import weibo4android.Status;
import weibo4android.Weibo;
import weibo4android.WeiboException;
import android.app.AlertDialog;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import com.cloay.weibo.R;
import com.cloay.weibo.WeiBoActivity;
import com.cloay.weibo.constants.OAuthConstant;
import com.cloay.weibo.service.MainService;
import com.cloay.weibo.utils.AsyncBitMapLoader;
import com.cloay.weibo.utils.AsyncBitMapLoader.ImageCallback;
import com.cloay.weibo.utils.AlertDlgUtil;
import com.cloay.weibo.utils.CheckNetUtil;
import com.cloay.weibo.utils.TextHightUtil;
import com.cloay.weibo.utils.TimeUtil;
import com.cloay.weibo.utils.ToastUtil;
/**
* 微博詳細信息
* 可以進行轉發,評論查看大圖等
* @author Cloay
* 2012-2-30
* 下午03:31:18
*/
public class StatusDetail extends WeiBoActivity{
private Weibo weibo = OAuthConstant.getInstance().getWeibo();
private ImageButton redirect; //右側轉發按鈕
private ImageView user_icon; //用戶頭像
private TextView user_name; //用戶暱稱
private TextView time; //微博發表時間
private TextView status_text; //微博內容
private ImageView picture; //微博圖片
private EditText comment_text; //評論內容
private Button commentBtn; //評論按鈕
private ImageButton scaleImage; //查看大圖按鈕
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE); //去掉系統標題欄
MainService.allActivity.add(this);
setContentView(R.layout.detail_status);
//不讓輸入法自動彈出
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
final Status status = (Status) getIntent().getSerializableExtra("status");
redirect = (ImageButton) findViewById(R.id.title_bt_right);
redirect.setOnClickListener(new OnClickListener() { //轉發微博
@Override
public void onClick(View v) {
try {
Status reStatus = weibo.retweetStatus(status.getId());
if(!"".equals(reStatus.getText())){
ToastUtil.showToast(StatusDetail.this, "轉發成功!");
}
} catch (WeiboException e) {
ToastUtil.showToast(StatusDetail.this, "轉發失敗!");
}
}
});
initStatus(status); //初始化微博內容
initComment(status); //評論
}
/**
* 初始化微博內容
* @param status
*/
private void initStatus(final Status status) {
user_icon = (ImageView) findViewById(R.id.user_logo);
setImage(status.getUser().getProfileImageUrl(), user_icon); //設置用戶頭像
user_name = (TextView) findViewById(R.id.user_name);
user_name.setText(TextHightUtil.setTextHight(status.getUser().getName())); //設置用戶暱稱並高亮顯示
time = (TextView) findViewById(R.id.time);
time.setText(TimeUtil.getCreateAt(status.getCreatedAt())); //設置微博發表時間
status_text = (TextView) findViewById(R.id.status_content); //微博內容
String statusStr = status.getText();
if(null != status.getRetweeted_status()){ //如果包含轉發的內容
statusStr += status.getRetweeted_status().getText();
}
TextHightUtil.textHighlight(statusStr, status_text); //設置微博內容
picture = (ImageView) findViewById(R.id.picture);
final String imageUrl = status.getOriginal_pic();
if(!"".equals(imageUrl)){ //如果微博中包含圖片
this.findViewById(R.id.scale_layout).setVisibility(View.VISIBLE);
scaleImage = (ImageButton) findViewById(R.id.scale_btn);
scaleImage.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showOriginalImage(imageUrl); //放大圖片
}
});
setImage(imageUrl, picture);
picture.setVisibility(View.VISIBLE);
}
}
/**
* 顯示大圖
* @param imageUrl
* 圖片地址
*/
private void showOriginalImage(String imageUrl) {
View view = View.inflate(StatusDetail.this, R.layout.show_original_image, null);
final AlertDialog dialog = new AlertDialog.Builder(StatusDetail.this)
.setView(view)
.create();
dialog.show();
ImageButton close = (ImageButton) view.findViewById(R.id.close_btn); //關閉查看大圖窗口
close.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
ImageView image = (ImageView) view.findViewById(R.id.originalImage);
setImage(imageUrl, image); //設置大圖
}
/**
* 發表評論
* @param status
*/
private void initComment(final Status status) {
comment_text = (EditText) findViewById(R.id.comment_edit_text);
commentBtn = (Button) findViewById(R.id.comment_status_btn);
commentBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
updateComment(status);
}
});
}
/**
* 發佈微博
* 微博內容不能爲空且字數小於140
*/
private void updateComment(Status status) {
String commentText = comment_text.getText().toString();
if("".equals(commentText)){ //微博內容不能爲空且字數小於140.
ToastUtil.showToast(StatusDetail.this, "評論內容不能爲空!");// 爲空時提示
}else{
if(commentText.length() > 140){
ToastUtil.showToast(this, "字數不能多於140!"); //大於140個字符時
}
if(CheckNetUtil.checkNet(StatusDetail.this)){ //檢查網絡是否可用
try {
Comment comment = weibo.updateComment(commentText, ""+status.getId(), "");
if(!"".equals(comment.getText())){
ToastUtil.showToast(StatusDetail.this, "評論成功!");
}
} catch (WeiboException e) {
ToastUtil.showToast(StatusDetail.this, "評論失敗!");
}
}else{
AlertDlgUtil.alertDialogNetErr(StatusDetail.this);
}
}
}
/**
* 異步獲取圖片並設置
* @param imageUrl
* @param image
*/
private void setImage(String imageUrl, final ImageView image) {
AsyncBitMapLoader asyncBitMapLoader = new AsyncBitMapLoader();
asyncBitMapLoader.loadBitMap(imageUrl, new ImageCallback() {
@Override
public void imageLoaded(Bitmap bitmap, String imageUrl) {
image.setImageBitmap(bitmap);
}
});
}
}
該註釋的地方都註釋了,不再多說了!有問題請留言,大家一起學習交流!
說明:轉載請註明出處!