我对Android很新,我正在尝试为 listView 添加上下文菜单。所以我按照android开发者页面中显示的指南进行操作如果我长按 listView 中的项目,我会在操作栏中显示上下文菜单。我要添加的是,当我选择多个项目时,我想在上下文菜单中显示计数。此外,当我点击上下文菜单中的bin图标时,我喜欢删除所选项目。
我认为如果你看到我的代码会有点效率。下面是我的代码。它只是在开发者页面中描述
albumListView.setOnItemClickListener(this);
albumListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
albumListView.setMultiChoiceModeListener(new MultiChoiceModeListener() {
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
// TODO Auto-generated method stub
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
// TODO Auto-generated method stub
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.album_context_menu, menu);
return true;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position,
long id, boolean checked) {
// TODO Auto-generated method stub
}
});
如果你能提出一些建议,我会很高兴
答案 0 :(得分:0)
MainActivity:
package com.example.listviewexample;
import java.util.ArrayList;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.ActionMode;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.ViewGroup;
import android.widget.AbsListView.MultiChoiceModeListener;
import android.widget.ListView;
public class MainActivity extends Activity {
ListView listViewObj;
MyAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayList<String> listArgument = new ArrayList<String>();
listArgument.add("Item 1");
listArgument.add("Item 2");
listArgument.add("Item 3");
listArgument.add("Item 4");
listArgument.add("Item 5");
listArgument.add("Item 6");
listArgument.add("Item 7");
Log.d("listArgument", listArgument.toString());
listViewObj = (ListView) findViewById(R.id.list);
adapter = new MyAdapter(this, listArgument);
listViewObj.setAdapter(adapter);
listViewObj.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
listViewObj.setSelected(true);
listViewObj.setMultiChoiceModeListener(new MultiChoiceModeListener() {
int selectionCounter;
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
// TODO Auto-generated method stub
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
// TODO Auto-generated method stub
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case R.id.action_delete:
selectionCounter = 0;
adapter.removeItem();
mode.finish();
return true;
default:
return false;
}
}
@Override
public void onItemCheckedStateChanged(ActionMode mode,
int position, long id, boolean checked) {
if (checked) {
selectionCounter++;
adapter.selectedItem(position, position);
} else {
selectionCounter--;
adapter.removeSelection(position);
}
mode.setTitle("Selected :" + selectionCounter);
}
});
}
}
适配器类:
package com.example.listviewexample;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import android.content.Context;
import android.graphics.Color;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.TextView;
public class MyAdapter extends BaseAdapter{
HashMap<Integer,Integer> selectionValueMap = new HashMap<Integer,Integer>();
Context vContext;
ArrayList<String> DataValueList = new ArrayList<String>();
public MyAdapter(Context context,ArrayList<String> DataValueList)
{
this.vContext = context;
this.DataValueList = DataValueList;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return DataValueList.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return DataValueList.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
public void selectedItem(int postion ,int flag)
{
selectionValueMap.put(postion, flag);
notifyDataSetChanged();
}
public void removeSelection(int position)
{
selectionValueMap.remove(position);
notifyDataSetChanged();
}
public void removeItem()
{
Set<Integer> mapKeySet = selectionValueMap.keySet();
Iterator keyIterator = mapKeySet.iterator();
while(keyIterator.hasNext())
{
int key = (Integer) keyIterator.next();
Log.d("key", Integer.toString(key));
DataValueList.remove(key);
//DataValueList.remove(selectionValueMap.get(key));
}
notifyDataSetChanged();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater mInflater = (LayoutInflater) vContext.getSystemService(vContext.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.list_item, null);
TextView tx = (TextView)convertView.findViewById(R.id.textView1);
tx.setText(DataValueList.get(position));
if(selectionValueMap.get(position) != null)
{
tx.setBackgroundColor(Color.GREEN);//Choose Any Color
}
return convertView;
}
}