2017-05-05 70 views
0

我需要從AppCompatDialogFragment獲取ActionBar實例。如何從AppCompatDialogFragment獲取ActionBar實例?

public class EditTextFragment extends AppCompatDialogFragment{ 
    EditText etContent; 
    TextEditedListener textEditedListener; 
    @Override 
    public void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_Black); 
     //get ActionBar belongs to EditTextFragment 
    } 
    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     if(etContent == null){ 
      etContent = (EditText) inflater.inflate(R.layout.et_content,null); 
     } 
     return etContent; 
    } 
    interface TextEditedListener{ 
     void onTextEdited(String txt); 
    } 
} 

我試過這個,但它似乎不起作用。

ActionBar actionBar = ((MyActivity) getContext()).getSupportActionBar(); 
setCustomActionBar(actionBar); 

感謝所有幫助

+0

請添加說明,操作在操作欄上執行什麼操作。 –

+0

@Javacoder好的,我需要兩個ImageButton和一個ActionBar上的標題TextView。一個用於解除dialogFragment的按鈕,另一個用於調用回調方法。 – Cyrus

回答

0

我找到了可能的答案。所以here我解決問題這種方式。

1,創建我自己的工具欄//fake_action_bar.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/fake_action_bar" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent" 
    android:minHeight="?attr/actionBarSize" 
    app:navigationIcon="@android:drawable/ic_menu_manage" 
    android:background="@color/background_material_dark" 
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light" > 
    <TextView 
     android:id="@+id/actionbar_textview" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:maxLines="1" 
     android:clickable="false" 
     android:focusable="false" 
     android:longClickable="false" 
     android:textStyle="bold" 
     android:text="title" 
     android:textSize="18sp" 
     android:textColor="#FFFFFF" /> 
    </android.support.v7.widget.Toolbar> 

2.增加fake_action_bar到我的內容視圖

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    > 

    <include 
     android:id="@+id/fake_action_bar" 
     layout="@layout/fake_action_bar" /> 

</LinearLayout> 

3.Find在AppCompatDialogFragment的action_bar和初始化它。

public class EditTextFragment extends AppCompatDialogFragment { 
     ViewGroup mRootView; 
     Toolbar toolbar;   
     @Override 
     public void onCreate(@Nullable Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setStyle(DialogFragment.STYLE_NORMAL, R.style.AppTheme_NoTitleBar_Blue);   
     } 
     @Nullable 
     @Override 
     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
      if (mRootView == null) { 
       mRootView = (ViewGroup) inflater.inflate(R.layout.et_content, null); 
       etContent = (EditText) mRootView.findViewById(R.id.et_content); 

       toolbar = (Toolbar) mRootView.findViewById(R.id.fake_action_bar); 
       toolbar.inflateMenu(R.menu.menu_add); 
       toolbar.setNavigationOnClickListener(v -> dismiss()); 
       toolbar.setOnMenuItemClickListener(item -> { 
        switch (item.getItemId()) { 
         case android.R.id.home: 
          dismiss(); 
          return true; 
         case R.id.item_test: 
          if (textEditedListener != null) { 
           textEditedListener.onTextEdited(etContent.getText().toString()); 
          } 
          dismiss(); 
          return true; 
        } 
        return true; 
       }); 
      } 
      return mRootView; 
     } 
    } 
1

您可以使用類型轉換到ActionBarActivity場景中獲得的動作條。

試試這個,

ActionBar actionBar = ((AppCompatActivity)getActivity()).getSupportActionBar(); 
+0

不推薦使用ActionBarActivity;改用'AppCompatActivity'。 MyActivity擴展了AppCompatActivity並且不起作用。 – Cyrus