2017-10-04 26 views
1

我對編碼非常陌生,所以我可能無法正確表達自己,請耐心等待。如何訪問Android中的工具欄中的按鈕

我有一個在包含工具欄的佈局中膨脹的片段。當我打開片段時,我想添加一個按鈕(不是菜單,只是一個按鈕導航到另一個片段)。 我的問題是我不知道如何實例化我的Fragment類中的按鈕來添加圖標和onClickListener

這裏是我的xml文件: 包含我的片段佈局:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="be.ac.ulg.mobulis.Activities.MainActivity" 
    android:orientation="vertical"> 

    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="@color/blue" 
      app:popupTheme="@style/AppTheme.PopupOverlay" > 

      <Button 
       android:id="@+id/toolbar_button" 
       android:layout_width="@dimen/margin" 
       android:layout_height="@dimen/margin" 
       android:layout_gravity="right" 
       android:layout_marginRight="@dimen/innerLargeMargin" 
       /> 

      </android.support.v7.widget.Toolbar> 

    </android.support.design.widget.AppBarLayout> 

    <include layout="@layout/content_main" /> 

</LinearLayout> 

在該片段充氣佈局:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:design="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context="be.ac.ulg.mobulis.Activities.MainActivity" 
    tools:showIn="@layout/app_bar_main" 
    android:background="@color/orange"> 

    <FrameLayout 
     android:id="@+id/container" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:background="#f1f1f1"> 

    </FrameLayout> 

    <android.support.design.widget.BottomNavigationView 
     android:id="@+id/navigation" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="start" 
     design:menu="@menu/bottom_nav_items" 
     android:background="@color/orange" 
     android:backgroundTint="@color/white" 
     design:itemIconTint="@color/white" 
     design:itemTextColor="@color/white" 
     design:itemBackground="@drawable/bottom_bar_tint_selector" 
     /> 

</LinearLayout> 

所以我想要做的是一樣的東西

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    toolBarButton = (???).findViewById(R.id.toolbar_button) 
} 
+0

如果你不想菜單,然後在片段中自定義佈局添加到您的工具欄,這樣你可以很容易地添加一個按鈕或改變你的工具欄。 – Umair

回答

3

activity_main.xml中添加MainActivity.java內android.support.v7.widget.Toolbar

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:orientation="vertical"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="56dp" 
     android:background="#FFA000"> 
     <Button 
      android:id="@+id/toolbarbtn" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Button" 
      android:layout_gravity="right"/> 
    </android.support.v7.widget.Toolbar> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Hello World!" /> 
</LinearLayout> 

按鈕

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.Toast; 

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.Toast; 

public class MainActivity extends AppCompatActivity { 

    Button toolBarBtn; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     getSupportActionBar().setTitle("Toolbar with button example"); 
     toolbar.setSubtitle("Toolbar subtitle"); 
     toolbar.setLogo(android.R.drawable.ic_menu_info_details); 

     toolBarBtn = (Button)findViewById(R.id.toolbarbtn); 
     toolBarBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(getBaseContext(), 
         "Button in ToolBar clicked", 
         Toast.LENGTH_LONG).show(); 
      } 
     }); 
    } 


} 
+0

如何你的「答案」的答案*如何從我的片段實例化按鈕* – Selvin

+0

你有兩個選擇的片段讓工具欄 第一個 程序工具欄=(欄) getActivity()。findViewById(R.id。工具欄); 和第二個 Toolbar toolbar =((MainActivity)getActivity())。mToolbar; –

+0

那你爲什麼不把它寫在答案中? – Selvin

1

試試這個來從activi訪問工具欄的按鈕ty

private Toolbar toolbar; 
toolbar = (Toolbar) findViewById(R.id.ar_toolbar); 
Button toolbar_button = (Button) toolbar.findViewById(R.id.toolbar_button);  
setSupportActionBar(toolbar); 


toolbar_button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Toast.makeText(ChatActivity.this, "Clicked", Toast.LENGTH_SHORT).show(); 
      } 
     }); 
+0

我的工具欄和按鈕都是空的。我相信這是因爲他們不在同一個XML文件,所以我不能做findViewById(R.id.toolbar); –

+0

添加工具欄和按鈕,在您的活動XML佈局 –

1

在Fragment的父級活動中設置此onClick監聽器。

1

你必須寫像下面

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    toolBarButton = (Button) view.findViewById(R.id.toolbar_button); 

其中view是你在你的onCreateViewFragment綁定您的視圖。

0

您可以直接訪問按鈕,而無需使用工具欄(按鈕)findViewById(R.id.toolbar_button)

Toolbar toolbar = (Toolbar) findViewById(R.id.ar_toolbar); 
Button toolbar_button = (Button) findViewById(R.id.toolbar_button);  
setSupportActionBar(toolbar); 
1

我要做的就是裏面的視圖綁定活動,然後創建一個與該視圖一起工作的界面。

public class Activity implements ButtonListener{ 

//findViewbyId or Butterknife 

void doSomething(){ 
    toolBarButton.something() 
} 

接口

} 
public interface ButtonListener{ 
    void doSomething(); 
} 

片段

public class Fragment extends Fragment{ 
    public ButtonListener mButton; 

    @Override 
    public void onCreate(@Nullable Bundle savedInstanceState) { 
     mButton = (ButtonListener)getActivity(); 
     super.onCreate(savedInstanceState); 
    } 
} 
相關問題