2019独角兽企业重金招聘Python工程师标准>>>
看了很多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
m_commentList = new ArrayList (); - 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
{ - 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
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
params = new HashMap () ; - 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
- }
- };