Я создатель noob для разработки Android, и я пытаюсь отобразить CAB от List_Adapter
, когда пользователь нажимает кнопку на элементе списка. Я следую ActionbarSherlock sample, но не могу понять, почему я получаю ошибку «Метод startActionMode(Child_Locations_ListAdapeter.AnActionModeOfEpicProportions)
не определен для типа Child_Locations_ListAdapeter
». Любая помощь приветствуется.Как показать панель контекстного действия из адаптера списка?
КОД
public class Child_Locations_ListAdapeter extends BaseAdapter implements OnClickListener {
private ArrayList<HashMap<String, String>> listData;
private LayoutInflater layoutInflater;
Context c;
int selection;
ActionMode mMode;
public Child_Locations_ListAdapeter(Context context, ArrayList listData) {
this.listData = listData;
layoutInflater = LayoutInflater.from(context);
c= context;
}
public void remove(int position) {
listData.remove(position);
notifyDataSetChanged();
}
public void insert(int position, String item, String item2) {
HashMap<String, String> map = new HashMap<String, String>();
map.put("Location",item);
map.put("Location_Address",item2);
listData.add(position, map);
notifyDataSetChanged();
}
@Override
public int getCount() {
return listData.size();
}
@Override
public Object getItem(int position) {
return listData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = layoutInflater.inflate(R.layout.layout_row_locations, null);
holder = new ViewHolder();
//holder.userAvatar = (ImageView) convertView.findViewById(R.id.client_image);
holder.locationName = (TextView) convertView.findViewById(R.id.tv_locationname);
holder.locationAddress = (TextView) convertView.findViewById(R.id.tv_locationaddress);
holder.delete = (ImageButton) convertView.findViewById(R.id.action_delete);
holder.delete.setOnClickListener(Child_Locations_ListAdapeter.this);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.delete.setTag(position);
//holder.userAvatar.setText(((Comment_Item) listData.get(position)).getUserName());
try{
holder.locationName.setText((listData.get(position)).get("Location"));
holder.locationAddress.setText((listData.get(position)).get("Location_Address"));
}catch(Exception e){
e.printStackTrace();
//holder.locationName.setText("No Locations For This Child");
//holder.locationAddress.setText("");
}
//Geocoder_Class geocoder = new Geocoder_Class(c);
//holder.locationAddress.setText(geocoder.getAddress((listData.get(position)).get("Latitude"), (listData.get(position)).get("Longitude")));
return convertView;
}
static class ViewHolder {
ImageView location_picture;
TextView locationName;
TextView locationAddress;
ImageButton delete;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.action_delete:
selection = (Integer)v.getTag();
Log.e("Selection", String.valueOf(selection));
mMode = startActionMode(new AnActionModeOfEpicProportions());//<--The method startActionMode(Child_Locations_ListAdapeter.AnActionModeOfEpicProportions) is undefined for the type Child_Locations_ListAdapeter
}
}
public class AnActionModeOfEpicProportions implements ActionMode.Callback {
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
//Used to put dark icons on light action bar
//boolean isLight = SampleList.THEME == R.style.Theme_Sherlock_Light;
menu.add("Save")
.setIcon(R.drawable.ic_compose)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
menu.add("Search")
.setIcon(R.drawable.ic_search)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
menu.add("Refresh")
.setIcon(R.drawable.ic_refresh)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
menu.add("Save")
.setIcon(R.drawable.ic_compose)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
menu.add("Search")
.setIcon(R.drawable.ic_search)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
menu.add("Refresh")
.setIcon(R.drawable.ic_refresh)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
Toast.makeText(c, "Got click: " + item, Toast.LENGTH_SHORT).show();
mode.finish();
return true;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
}
}
}
Спасибо за ваш ответ, но теперь моя ошибка говорит «Метод startActionMode (ActionMode.Callback) в типе Activity не применим для аргументов (Child_Locations_ListAdapeter.AnActionM odeOfEpicProportions) « – DollaBill
См. обновленный ответ, вам нужно создать экземпляр AnActionModeOfEpicProportions (с помощью new()) – JonathanK