Anj*_*ali 1 android listview contextual-action-bar actionmode
我一直试图在checkBox上使用Contextual Action Bar单击以从listView中删除多行... listview在每行中都有一个复选框和一个textview.在适配器类中,我调用startActionMode(),如下所示:
**@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder=null;
View view=convertView;
Log.v("ConvertView", String.valueOf(position));
final ToPayModel state = toPayList.get(position);
if (convertView == null)
{
inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.to_pay_item, null);
holder = new ViewHolder();
holder.name = (TextView) convertView.findViewById(R.id.tvToPay);
holder.check = (CheckBox) convertView.findViewById(R.id.toPaycheck);
convertView.setTag(holder);
//holder.name.setOnCheckedChangeListener();
}
else
{
holder = (ViewHolder) convertView.getTag();
}
holder.check.setOnClickListener( new View.OnClickListener()
{
public void onClick(View v)
{
CheckBox cb = (CheckBox) v;
ToPayModel toPayModel = (ToPayModel) cb.getTag();
Toast.makeText(context, "Clicked on Checkbox: " + cb.getText() + " is " + cb.isChecked(),
Toast.LENGTH_LONG).show();
toPayModel.setCheck(cb.isChecked());
if(state.isCheck()){
mActionMode=context.startActionMode(new ActionBarCallback());
}
else{
mActionMode.finish();
}
}
});
//holder.code.setText(" (" + state.getCode() + ")");
holder.name.setText(state.getName());
holder.check.setTextColor(Color.BLACK);
holder.check.setChecked(state.isCheck());
holder.check.setTag(state);
return convertView;
}
public static final class ActionBarCallback implements ActionMode.Callback{
public ActionBarCallback(){
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
mode.getMenuInflater().inflate(R.menu.contextual_menu,menu);
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
mode.setTitle("Checkbox Selected");
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch(item.getItemId()){
case R.id.delete_item:
// removeSelection();
return true;
default: return false;
}
}
@Override
public void onDestroyActionMode(ActionMode mode) {
mode.finish();
}
}**
Run Code Online (Sandbox Code Playgroud)
Adapter类扩展了BaseAdapter
public class ToPayListAdapter extends BaseAdapter {
static Context context;
LayoutInflater inflater;
ActionMode mActionMode=null;
public ArrayList<ToPayModel> toPayList;
public ToPayListAdapter(Context context,ArrayList<ToPayModel> toPayList){
this.context=context;
this.toPayList=toPayList;
}
Run Code Online (Sandbox Code Playgroud)
但问题是,当我调用startActionMode()时出错.它说不能解决方法.是因为我在getView方法中调用...我很无奈......任何回复都将受到赞赏.先感谢您.
该方法startActionMode已定义Activity但未定义Context(请参阅文档).
在您的第一个代码块中,如果您传递的Activity是上下文,则可以将其转换Activity为如下:
mActionMode=((Activity)context).startActionMode(new ActionBarCallback());
Run Code Online (Sandbox Code Playgroud)
或者更改声明
Context context;
Run Code Online (Sandbox Code Playgroud)
至:
Activity context;
Run Code Online (Sandbox Code Playgroud)
从评论中编辑:
如果您ActionMode.Callback从a View.OnClickListener()中启动a Fragment,则可以检索Activity此片段当前与使用的关联getActivity():
YourFragmentClass.this.getActivity().startActionMode(...);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4391 次 |
| 最近记录: |