安卓:从帮助创建列表视图上下文菜单 [英] Android: help create Context menu from listview
本文介绍了安卓:从帮助创建列表视图上下文菜单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
这是类。我想右键菜单添加到它长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:机器人=http://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屋!
查看全文