看了很多listview的长按事件,但几乎都是只给出弹出菜单的代码,没有给出选中的某个项的代码,我贴个全的吧,免得摸索麻烦
思路就是
listview在父窗口先注册一个长按弹出菜单registerReceiver=》设置一个长按的listener,保存好选中item数据=》onCreateContextMenu添加菜单=》onContextItemSelected菜单响应处理;
就这么简单。
[java] view plain copy print ?
-
import java.util.ArrayList;
-
import java.util.Collections;
-
import java.util.Comparator;
-
import java.util.HashMap;
-
import java.util.Map;
-
import org.json.JSONException;
-
import org.json.JSONObject;
-
import android.app.Activity;
-
import android.app.ProgressDialog;
-
import android.content.BroadcastReceiver;
-
import android.content.Context;
-
import android.content.Intent;
-
import android.content.IntentFilter;
-
import android.content.res.Resources;
-
import android.graphics.Color;
-
import android.os.Bundle;
-
import android.text.Spannable;
-
import android.text.SpannableStringBuilder;
-
import android.text.style.ForegroundColorSpan;
-
import android.util.Log;
-
import android.view.ContextMenu;
-
import android.view.ContextMenu.ContextMenuInfo;
-
import android.view.LayoutInflater;
-
import android.view.MenuItem;
-
import android.view.View;
-
import android.view.View.OnClickListener;
-
import android.view.View.OnCreateContextMenuListener;
-
import android.view.ViewGroup;
-
import android.view.Window;
-
import android.widget.AdapterView;
-
import android.widget.AdapterView.OnItemClickListener;
-
import android.widget.AdapterView.OnItemLongClickListener;
-
import android.widget.BaseAdapter;
-
import android.widget.Button;
-
import android.widget.EditText;
-
import android.widget.LinearLayout;
-
import android.widget.ListView;
-
import android.widget.TextView;
-
import android.widget.Toast;
-
public class CommentsListActivity extends Activity
-
{
-
private String m_jid = "0";
-
private ListView m_listView;
-
private EditText m_ETReply;
-
private Appdata m_appdata;
-
private TextView m_TVReply;
-
private TextView m_TVid;
-
private LinearLayout m_ReplyArea;
-
private String m_replycCmmentID = "";
-
private String m_replyCommentContent = "";
-
private boolean m_bcomments = false;
-
private ArrayList<JSONObject> m_commentList = new ArrayList<JSONObject>();
-
private Helper.SmartJSONArray m_commentObj = null;
-
public void onCreate(Bundle savedInstanceState)
-
{
-
super.onCreate(savedInstanceState);
-
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
-
setContentView(R.layout.comments);
-
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,
-
R.layout.title);
-
m_appdata = (Appdata)this.getApplicationContext();
-
m_listView = (ListView)this.findViewById(R.id.listViewShow);
-
m_ETReply = (EditText)this.findViewById(R.id.editTextComment);
-
m_ReplyArea = (LinearLayout)this.findViewById(R.id.ReplyArea);
-
m_TVReply = (TextView)m_ReplyArea.findViewById(R.id.TVReply);
-
m_TVid = (TextView)this.findViewById(R.id.TVid);
-
Button btnBefore = (Button)this.findViewById(R.id.btn_before);
-
btnBefore.setText(R.string.back);
-
btnBefore.setVisibility(View.VISIBLE);
-
Intent intentFrom = this.getIntent();
-
Bundle bd = intentFrom.getExtras();
-
this.m_jid = bd.getString("jid");
-
TextView viewTitle = (TextView)this.findViewById(R.id.app_title);
-
viewTitle.setText("\"" + Helper.SmartText(bd.getString("title"), 10, true) + "\"的评论");
-
IntentFilter intentFilter= new IntentFilter();
-
intentFilter.addAction(Helper.INTENAL_ACTION_GETPLANCOMMENTS);
-
registerReceiver(br,intentFilter);
-
Intent intent= new Intent(Helper.INTENAL_ACTION_GETPLANCOMMENTS);
-
sendBroadcast(intent);
-
onLongClickListView();
-
}
-
@Override
-
public void onDestroy()
-
{
-
super.onDestroy();
-
unregisterReceiver(br);
-
}
-
class SortByTime implements Comparator<JSONObject> {
-
public int compare(JSONObject o1, JSONObject o2) {
-
try {
-
if (Helper.getDiffDays(o1.getString("time"), o2.getString("time")) < 0)
-
return 1;
-
} catch (JSONException e) {
-
e.printStackTrace();
-
}
-
return 0;
-
}
-
}
-
public void comment(View v)
-
{
-
IntentFilter intentFilter= new IntentFilter();
-
intentFilter.addAction(Helper.INTENAL_ACTION_GETPLANDOCOMMENT);
-
registerReceiver(br,intentFilter);
-
Intent intent= new Intent(Helper.INTENAL_ACTION_GETPLANDOCOMMENT);
-
sendBroadcast(intent);
-
}
-
public void doBefore(View v)
-
{
-
CommentsListActivity.this.finish();
-
}
-
void onLongClickListView()
-
{
-
m_listView.setOnItemLongClickListener(itemLongClick);
-
registerForContextMenu(m_listView);
-
}
-
public void onCreateContextMenu(ContextMenu menu, View v,
-
ContextMenuInfo menuInfo) {
-
super.onCreateContextMenu(menu, v, menuInfo);
-
menu.add(0,0,0,"回复评论");
-
}
-
@Override
-
public boolean onContextItemSelected(MenuItem aItem) {
-
ContextMenuInfo menuInfo = (ContextMenuInfo) aItem.getMenuInfo();
-
Toast ta;
-
ta = Toast.makeText(CommentsListActivity.this, "onContextItemSelected", Toast.LENGTH_LONG);
-
ta.show();
-
/* Switch on the ID of the item, to get what the user selected. */
-
switch (aItem.getItemId()) {
-
case 0:
-
if(!CommentsListActivity.this.m_replycCmmentID.equals(""))
-
{
-
CommentsListActivity.this.m_ReplyArea.setVisibility(View.VISIBLE);
-
CommentsListActivity.this.m_TVReply.setText(this.m_replyCommentContent);
-
CommentsListActivity.this.m_TVid.setText(m_replycCmmentID);
-
}
-
return true;
-
}
-
return false;
-
}
-
void initData()
-
{
-
int diarycount = this.m_commentObj.getLength();
-
if( diarycount >= 1)
-
{
-
for (int i = 0; i < diarycount; i++)
-
{
-
this.m_commentList.add(this.m_commentObj.getObj(i));
-
}
-
Collections.sort(this.m_commentList, new SortByTime());
-
}
-
CommentItemAdapter dia = new CommentItemAdapter(this);
-
m_listView.setAdapter(dia);
-
}
-
void addCommentItem(JSONObject objCommentItem)
-
{
-
try {
-
objCommentItem.put("from_nick", objCommentItem.getString("user_name"));
-
} catch (JSONException e) {
-
e.printStackTrace();
-
}
-
m_ETReply.setText("");
-
this.m_commentList.add(0, objCommentItem);
-
CommentItemAdapter adp = (CommentItemAdapter)m_listView.getAdapter();
-
adp.notifyDataSetChanged();
-
m_listView.setFocusable(true);
-
}
-
public class CommentData
-
{
-
public TextView TVname;
-
public TextView TVtime;
-
public TextView TVcontent;
-
public TextView TVcid;
-
}
-
public class CommentItemAdapter extends BaseAdapter
-
{
-
private LayoutInflater mInflater;
-
public CommentItemAdapter(Context context)
-
{
-
this.mInflater = LayoutInflater.from(context);
-
}
-
public View getConvertView(int i)
-
{
-
View view = mInflater.inflate(getItemViewType(i), null);
-
CommentData item = new CommentData();
-
item.TVname = (TextView)view.findViewById(R.id.TVname);
-
item.TVtime = (TextView)view.findViewById(R.id.TVtime);
-
item.TVcontent = (TextView)view.findViewById(R.id.TVcontent);
-
item.TVcid = (TextView)view.findViewById(R.id.TVcid);
-
view.setTag(item);
-
return view;
-
}
-
@Override
-
public int getCount() {
-
return CommentsListActivity.this.m_commentList.size();
-
}
-
@Override
-
public int getItemViewType(int position) {
-
return R.layout.listview_item_comment;
-
}
-
@Override
-
public Map<String,Object> getItem(int arg0) {
-
return null;
-
}
-
@Override
-
public long getItemId(int arg0) {
-
return arg0;
-
}
-
@Override
-
public View getView(int position, View convertView, ViewGroup parent) {
-
View view = null;
-
if(convertView == null)
-
{
-
view = getConvertView(position);
-
}
-
else
-
{
-
view = convertView;
-
}
-
CommentData item = (CommentData)view.getTag();
-
try {
-
JSONObject obj = CommentsListActivity.this.m_commentList.get(position);
-
String strTime = obj.getString("time");
-
item.TVtime.setText(strTime);
-
item.TVcontent.setText(Helper.outToTextArea(obj.getString("content")));
-
String str = obj.getString("from_nick");
-
item.TVname.setText(str);
-
item.TVcid.setText(obj.getString("id"));
-
} catch (JSONException e) {
-
e.printStackTrace();
-
}
-
return view;
-
}
-
}
-
private BroadcastReceiver br = new BroadcastReceiver() {
-
@Override
-
public void onReceive(Context context, Intent intent) {
-
String action = intent.getAction();
-
m_bcomments = action.equals(Helper.INTENAL_ACTION_GETPLANCOMMENTS);
-
boolean cdocomment = action.equals(Helper.INTENAL_ACTION_GETPLANDOCOMMENT);
-
if( m_bcomments || cdocomment){
-
final ProgressDialog progressDialog = ProgressDialog.show(CommentsListActivity.this, null, "亲,稍等片刻哦...", true, false);
-
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
-
HttpUtilService loginService = new HttpUtilService(CommentsListActivity.this.m_appdata.getToken());
-
Map<String, String> params = new HashMap<String, String>() ;
-
if(m_bcomments)
-
{
-
params.put("jid", CommentsListActivity.this.m_jid);
-
params.put("page", "1");
-
}
-
else
-
{
-
params.put("id", CommentsListActivity.this.m_jid);
-
params.put("title", "null");
-
if(CommentsListActivity.this.m_ReplyArea.getVisibility() == View.VISIBLE)
-
{
-
String strReply = m_TVReply.getText().toString() + ":" + m_ETReply.getText().toString();
-
params.put("reply", CommentsListActivity.this.m_TVid.getText().toString());
-
params.put("content", Helper.SmartText(Helper.outToHTML(strReply), 500, false));
-
}
-
else
-
{
-
params.put("content", Helper.SmartText(Helper.outToHTML(m_ETReply.getText().toString()), 500, false));
-
}
-
}
-
loginService.AsynPost(new HttpUtilService.CallbackListener() {
-
@Override
-
public void callback(String result) {
-
progressDialog.dismiss();
-
try {
-
JSONObject obj = new JSONObject(result);
-
int code = obj.getInt("code");
-
if( code == 1)
-
{
-
Toast ta;
-
if(CommentsListActivity.this.m_bcomments)
-
{
-
CommentsListActivity.this.m_commentObj = new Helper.SmartJSONArray(obj.getJSONArray("data"));
-
CommentsListActivity.this.initData();
-
ta = Toast.makeText(CommentsListActivity.this, "获取成功", Toast.LENGTH_LONG);
-
}
-
else
-
{
-
if(!obj.getString("data").equals("false"))
-
{
-
CommentsListActivity.this.addCommentItem(obj.getJSONObject("data"));
-
}
-
ta = Toast.makeText(CommentsListActivity.this, "评论成功", Toast.LENGTH_LONG);
-
}
-
ta.show();
-
}
-
else
-
{
-
Toast ta;
-
if(CommentsListActivity.this.m_bcomments)
-
ta = Toast.makeText(CommentsListActivity.this, "获取失败:"+code, Toast.LENGTH_LONG);
-
else
-
ta = Toast.makeText(CommentsListActivity.this, "评论失败:"+code, Toast.LENGTH_LONG);
-
ta.show();
-
}
-
} catch (JSONException e) {
-
e.printStackTrace();
-
Toast toast = Toast.makeText(CommentsListActivity.this, result, Toast.LENGTH_LONG );
-
toast.show();
-
}
-
}
-
}, CommentsListActivity.this.m_bcomments ? "/api/plan/get_comment" : "/api/plan/comment", params);
-
}
-
}
-
};
-
OnItemLongClickListener itemLongClick = new OnItemLongClickListener() {
-
@Override
-
public boolean onItemLongClick(AdapterView<?> arg0, View view,
-
final int arg2, long arg3) {
-
TextView cid = (TextView)view.findViewById(R.id.TVcid);
-
CommentsListActivity.this.m_replycCmmentID = cid.getText().toString();
-
TextView reply = (TextView)view.findViewById(R.id.TVcontent);
-
TextView name = (TextView)view.findViewById(R.id.TVname);
-
CommentsListActivity.this.m_replyCommentContent = "回复@" + name.getText() + " \"" + Helper.SmartText(reply.getText().toString(), 100, true) + "\"";
-
return false;//let the window create menu
-
}
-
};