安卓:从帮助创建列表视图上下文菜单上下文、视图、菜单、列表

由网友(此用户已被举报)分享简介:这是类。我想右键菜单添加到它长preSS但作为一个新手,我发现自己很难。请帮助。 私人的ListView lvUsers; 私人的ArrayList< UserBO> mListUsers;    / **当第一次创建活动调用。 * /    @覆盖    公共无效的onCreate(捆绑savedInst...

这是类。我想右键菜单添加到它长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());   }   返回视图。  } } 

解决方案 wps中的普通视图在哪

这应该做的伎俩。不要忘了: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>

阅读全文

相关推荐

最新文章