新浪微博开发之查看详细微博的实现

本文介绍了如何在新浪微博开发中实现查看详细微博的功能,包括传递微博数据到Activity,显示大图,转发和评论操作。当用户点击微博列表项时,会跳转到详细页面,其中转发功能通过设置监听器调用retweetStatus方法完成,大图浏览利用Dialog展示原图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实现了获取用户主页微博之后,我们还需要实现查看详细微博的功能。除微博常见的属性外,如果微博中包含图片,还要实现浏览大图的功能。同时我们还需要实现转发,评论等功能!今天我们就来实现上述功能。

详细微博:

                    


用户点击一个微博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);
			}
		});
	}

}

该注释的地方都注释了,不再多说了!有问题请留言,大家一起学习交流!

说明:转载请注明出处!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值