安卓:从帮助创建列表视图上下文菜单 [英] Android: help create Context menu from listview

查看:129
本文介绍了安卓:从帮助创建列表视图上下文菜单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是类。我想右键菜单添加到它长preSS但作为一个新手,我发现自己很难。请帮助。

 私人的ListView lvUsers;
 私人的ArrayList< UserBO> mListUsers;
    / **当第一次创建活动调用。 * /
    @覆盖
    公共无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.select);
        mListUsers = getUsers();
        lvUsers =(ListView控件)findViewById(R.id.lv_user);
        lvUsers.setAdapter(新ListAdapter(这一点,R.id.lv_user,mListUsers));    }    公众的ArrayList< UserBO> getUsers(){  DBAdapter dbAdapter = DBAdapter.getDBAdapterInstance(本);
  尝试{
   dbAdapter.createDataBase();
  }赶上(IOException异常五){
   Log.i(***选择,e.getMessage());
  }
     dbAdapter.openDataBase();
  查询字符串=SELECT * FROM用户;
  ArrayList的< ArrayList的<串GT;> StringList的= dbAdapter.selectRecordsFromDBList(查询,NULL);
  dbAdapter.close();  ArrayList的< UserBO> usersList =新的ArrayList< UserBO>();
  的for(int i = 0; I< stringList.size();我++){
   ArrayList的<串GT;清单= stringList.get(I)
   UserBO用户=新UserBO();
   尝试{
    user.id =的Integer.parseInt(list.get(0));
    user.name = list.get(1);
    user.age = list.get(2);
   }赶上(例外五){
    Log.i(***+ Select.class.toString(),e.​​getMessage());
   }
   usersList.add(用户);
  }
  返回usersList;
 } // *** *** ListAdapter
 私有类ListAdapter扩展ArrayAdapter< UserBO> {// --CloneChangeRequired
  私人的ArrayList< UserBO> mList; // --CloneChangeRequired
  私人语境mContext;  公共ListAdapter(上下文的背景下,INT textViewResourceId,ArrayList的< UserBO>名单){// --CloneChangeRequired
   超(背景下,textViewResourceId,清单);
   this.mList =清单;
   this.mContext =背景;
  }  公共查看getView(INT位置,查看convertView,父母的ViewGroup){
   查看查看= convertView;
   尝试{
   如果(查看== NULL){
    LayoutInflater VI =(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    鉴于= vi.inflate(R.layout.list_item,NULL); // --CloneChangeRequired(LIST_ITEM)
   }
   最后UserBO的listItem = mList.get(位置); // --CloneChangeRequired
   如果(的listItem!= NULL){
    //设置LIST_ITEM意见
    ((的TextView)view.findViewById(R.id.tv_id)).setText(listItem.getId()+);
    ((的TextView)view.findViewById(R.id.tv_name)).setText(listItem.getName());
    ((的TextView)view.findViewById(R.id.tv_age)​​).setText(listItem.getAge()+);   }}赶上(例外五){
    Log.i(Select.ListAdapter.class.toString(),e.​​getMessage());
   }
   返回视图。
  } }


解决方案

这应该做的伎俩。不要忘了:registerForContextMenu(lvUsers);

  / **第一次创建活动时调用。 * /
     @覆盖
     公共无效的onCreate(捆绑savedInstanceState){
       super.onCreate(savedInstanceState);
       的setContentView(R.layout.select);        mListUsers = getUsers();
        lvUsers =(ListView控件)findViewById(R.id.lv_user);
        lvUsers.setAdapter(新ListAdapter(这一点,R.id.lv_user,mListUsers));
        ** registerForContextMenu(lvUsers)**
        }@覆盖
公共无效onCreateContextMenu(文本菜单菜单视图V,ContextMenuInfo menuInfo){
  super.onCreateContextMenu(菜单,V,menuInfo);
  MenuInflater吹气= getMenuInflater();
  inflater.inflate(R.menu.context_menu,菜单);
}@覆盖
公共布尔onContextItemSelected(菜单项项){
  AdapterContextMenuInfo信息=(AdapterContextMenuInfo)item.getMenuInfo();
  开关(item.getItemId()){
  案例R.id.edit:
    editNote(info.id);
    返回true;
  案例R.id.delete:
    deleteNote(info.id);
    返回true;
  默认:
    返回super.onContextItemSelected(项目);
  }
}< XML版本=1.0编码=UTF-8&GT?;
<菜单的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android>
    <项目机器人:ID =@ + ID /编辑
          机器人:标题=@字符串/编辑/>
    <项目机器人:ID =@ + ID /删除
          机器人:标题=@字符串/删除/>
&所述; /菜单>

this is the class. i want to add context menu to it on longpress but as a newbie i find i difficult. Please help.

 private ListView lvUsers;
 private ArrayList<UserBO> mListUsers;


    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.select);


        mListUsers = getUsers();
        lvUsers = (ListView) findViewById(R.id.lv_user);
        lvUsers.setAdapter(new ListAdapter(this, R.id.lv_user, mListUsers));                

    }

    public ArrayList<UserBO> getUsers(){          

  DBAdapter dbAdapter=DBAdapter.getDBAdapterInstance(this);
  try {
   dbAdapter.createDataBase();
  } catch (IOException e) {
   Log.i("*** select ",e.getMessage());
  }
     dbAdapter.openDataBase();  
  String query="SELECT * FROM user;";
  ArrayList<ArrayList<String>> stringList = dbAdapter.selectRecordsFromDBList(query, null);
  dbAdapter.close();

  ArrayList<UserBO> usersList = new ArrayList<UserBO>();
  for (int i = 0; i < stringList.size(); i++) {
   ArrayList<String> list = stringList.get(i);
   UserBO user = new UserBO();
   try {
    user.id = Integer.parseInt(list.get(0));
    user.name = list.get(1);
    user.age = list.get(2);
   } catch (Exception e) {
    Log.i("***" + Select.class.toString(), e.getMessage());
   }
   usersList.add(user);
  }
  return usersList;
 }

 // ***ListAdapter***
 private class ListAdapter extends ArrayAdapter<UserBO> {  // --CloneChangeRequired
  private ArrayList<UserBO> mList;  // --CloneChangeRequired
  private Context mContext;

  public ListAdapter(Context context, int textViewResourceId,ArrayList<UserBO> list) { // --CloneChangeRequired
   super(context, textViewResourceId, list);
   this.mList = list;
   this.mContext = context;
  }

  public View getView(int position, View convertView, ViewGroup parent){
   View view = convertView;
   try{
   if (view == null) {
    LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    view = vi.inflate(R.layout.list_item, null);  // --CloneChangeRequired(list_item)
   }
   final UserBO listItem = mList.get(position);  // --CloneChangeRequired    
   if (listItem != null) {
    // setting list_item views      
    ( (TextView) view.findViewById(R.id.tv_id) ).setText( listItem.getId()+"");
    ( (TextView) view.findViewById(R.id.tv_name) ).setText( listItem.getName() );
    ( (TextView) view.findViewById(R.id.tv_age) ).setText( listItem.getAge()+"" );

   }}catch(Exception e){
    Log.i(Select.ListAdapter.class.toString(), e.getMessage());    
   }
   return view;
  }

 }

解决方案

This should do the trick. Don't forget to: registerForContextMenu(lvUsers);

/** Called when the activity is first created. */
     @Override
     public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.select);

        mListUsers = getUsers();
        lvUsers = (ListView) findViewById(R.id.lv_user);
        lvUsers.setAdapter(new ListAdapter(this, R.id.lv_user, mListUsers));  
        **registerForContextMenu(lvUsers);**      
        }

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
  super.onCreateContextMenu(menu, v, menuInfo);
  MenuInflater inflater = getMenuInflater();
  inflater.inflate(R.menu.context_menu, menu);
}

@Override
public boolean onContextItemSelected(MenuItem item) {
  AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
  switch (item.getItemId()) {
  case R.id.edit:
    editNote(info.id);
    return true;
  case R.id.delete:
    deleteNote(info.id);
    return true;
  default:
    return super.onContextItemSelected(item);
  }
}

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/edit"
          android:title="@string/edit" />
    <item android:id="@+id/delete"
          android:title="@string/delete" />
</menu>

这篇关于安卓:从帮助创建列表视图上下文菜单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆