2015-08-25 29 views
3

假設我有兩個按鈕,一個是位於操作欄(@ + id/button1)中的操作按鈕。另一個是佈局中的常用按鈕(@ + id/button2)。如何獲取操作欄按鈕? findviewbyid似乎不起作用

當我點擊button2時,如何設置button1被禁用?

findViewById(button1)似乎不起作用。它將返回null。

這是我的菜單的xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/button1" android:title="submit" android:showAsAction="always" /> </menu>

,這是我mainacticity:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.my, menu); 
    return true; 
} 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 
    if (id == R.id.button1) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_my); 
    button1 = (Button) findViewById(R.id.button1);/*which return null*/ 
    button2 = (Button) findViewById(R.id.button2); 
    button2.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      button1.setEnabled(false);/*what i failed to do*/ 
     } 
    }); 
} 
+0

共享代碼。 – Daenarys

回答

2

1.創建一個變量菜單項在您的Activity類

MenuItem menuItem; 

2 。在onCreateOptionsMenu找到你的變量

@Override 
     public boolean onCreateOptionsMenu(Menu menu) { 
      getMenuInflater().inflate(R.menu.menu_main, menu); 
      menuItem = menu.findItem(R.id.item_circuit); 
      return super.onCreateOptionsMenu(menu); 
     } 
  • 禁用項目在buttonClick方法

    button2.setOnClickListener(new View.OnClickListener() { 
           @Override 
           public void onClick(View v) { 
            menuItem.setEnabled(false); 
           } 
          }); 
    
  • +0

    也許我錯了。我想禁用button1(動作按鈕),當我點擊button2(普通按鈕) – HungryMilk

    +0

    好吧,我得到你。我編輯我的答案。 –

    +0

    非常感謝!不知道findItem()之前... – HungryMilk

    0

    你必須使用findViewById之前以膨脹佈局/視圖。

    就像是:

    private Toolbar toolbar; 
    
    // Set a Toolbar to replace the ActionBar. 
    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    
    cartLayout = (RelativeLayout) toolbar.findViewById(R.id.rl_cart); 
    

    你的工具欄佈局會是這樣:

    <RelativeLayout 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_gravity="right"> 
    
        <RelativeLayout 
         android:id="@+id/rl_cart" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:layout_gravity="right" 
         android:padding="5dp"> 
    
    
         <ImageView 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:layout_marginRight="10dp" 
          android:src="@drawable/ic_cart" /> 
    
        </RelativeLayout> 
    </RelativeLayout> 
    

    你可以在這裏找到更多的答案:

    How can I implement custom Action Bar with custom buttons in Android?

    How to set two custom actionbar button in left and right in android?

    +0

    非常感謝,它的工作。但我想知道是否有更簡單的方法來做到這一點。 – HungryMilk

    0

    嘗試你還沒有嘗試過這種
    public void button1click(View v) { Button button2=(Button)getActionBar().getCustomView().findViewById(R.id.button2); button2.setClickable(false); button2.setEnabled(false); }