2016-12-05 102 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

相關問題