2016-12-05 75 views
0

我有一个ListView和一个Toolbar以上它在我的Activity。我想在点击ListView的项目执行某些操作时,用删除和编辑图标替换Toolbar默认图标(搜索和设置)。如何以编程方式替换Android工具栏图标?

+0

但是,您可以定义菜单XML图标 –

+0

@ cricket_007,我不想完全替换图标。我的意思是暂时替换它们以编辑单击的元素,然后工具栏收回它的图标。 – GB11

+2

我认为你正在寻找的是一个上下文操作栏。 http://www.technotalkative.com/contextual-action-bar-cab-android/ –

回答

1

所以,我从你的问题中了解到,你正在寻找ActionMode这可能符合你的目的。

所以这里有一个实施指南。

在您的Activity中声明ActionMode并让您的Activity实施ActionMode.Callback

public class YourActivity extends AppCompatActivity implements ActionMode.Callback { 

    // Declare ActionMode here 
    private ActionMode actionMode; 

    // Now implement the callback functions for ActionMode 
    @Override 
    public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) { 
     return false; 
    } 

    @Override 
    public boolean onCreateActionMode(final ActionMode actionMode, Menu menu) { 
     MenuInflater inflater = actionMode.getMenuInflater(); 

     // Inflate your menu here 
     inflater.inflate(R.menu.list_item_click_menu, menu); 
     return true; 
    } 

    @Override 
    public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) { 
     switch (menuItem.getItemId()) { 
      case R.id.action_delete: 
       // Do something 
       actionMode.finish(); 
       return true; 
      case R.id.action_edit: 
       // Do something 
       actionMode.finish(); 
       return true; 
      default: 
       return false; 
     } 
    } 

    @Override 
    public void onDestroyActionMode(ActionMode actionMode) { 
     try { 
      this.actionMode = null; 
      // Do something. Reset the views maybe? 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

我们发起您的ActionMode你需要有这个在您的列表项的onClick功能。

listItem.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 

     if (actionMode != null) { 
      return true; 
     } 

     // Show ActionMode 
     actionMode = startSupportActionMode(this); 
     actionMode.invalidate(); 
    } 
}); 

有时您可能需要重置ActionMode

@Override 
public void onResume() { 
    super.onResume(); 

    if (actionMode != null) { 
     actionMode.finish(); 
     actionMode = null; 
    } 
} 
+0

非常感谢Raez Murshard,这正是@ cricket_007建议的我所需要的。 – GB11

相关问题