2017-01-25 3 views
0

여러 활동 및 조각이 있습니다. BaseActivity에서 도구 모음을 설정하고 싶습니다 (한 번만 설정하십시오). 그러나 단편에서 툴바에 대한 액세스 권한이 필요합니다 (예 : show, hide, changeTitle 등과 같은 메소드) 제안 사항이 있습니까?BaseActivity의 도구 모음

나는 솔루션 아래에 시도했다, 그러나 나는 조각을 숨길 때, NPException는 내가 좋아하는 조각에 hideToolbar 전화

public class MyActivity extends BaseActivity() { 
} 

public abstract class BaseActivity extends AppCompatActivity { 

    Toolbar toolbar; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(getLayoutResource()); 
    configureToolbar(); 
    } 

    protected abstract int getLayoutResource(); 

    private void configureToolbar() { 
    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    if (toolbar != null) { 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    } 
    } 

public void hideToolbar() { 
    toolbar.setVisibility(View.GONE); 
} 

내 활동과 같습니다

public class MyFragment extends Fragment() { 

onCreate() { 

((Myactivity)getActivity).hideToolbar(); 
} 
+0

질문에 대한 자세한 내용을 추가하십시오. 당신의 조각 안에'hideToolbar' 메쏘드를 어떻게 호출합니까? 파생 된 활동은 어떻게 생겼습니까? 방금 추상 클래스 정의를 제공 했으므로 문제가있는 곳에서 대답을하기가 어려우므로 – akash93

답변

0

프래그먼트에서

,210
getActivity().getSupportActionBar(); 
+0

툴바는 항상 null입니다. – Stepan

0

사용 :

public abstract class BaseActivity extends AppCompatActivity { 

    private Toolbar toolbar; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(getLayoutResource()); 
    configureToolbar(); 
    } 

    protected abstract int getLayoutResource(); 

    private void configureToolbar() { 
    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    // changes made here, try to find if getSupportActionBar() is null or not after setting it - setSupportActionBar 

    setSupportActionBar(toolbar); 
    if (getSupportActionBar() != null) { 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    } 
    } 

// How and where you calling this method ? 
public void hideToolbar() { 
    toolbar.setVisibility(View.GONE); 
} 
+0

도 오류 코드를 추가하려고했습니다. – W4R10CK

+0

이제 오류는 없지만 언제 .hide 툴바를 호출합니다. 툴박스는 여전히 존재합니다. – Stepan

+0

은 'MyFragment' ->'((AppCompatActivity) getActivity()). getSupportActionBar(). hide();' – W4R10CK

2

내 프로젝트에서 당신처럼 뭔가를 포함해야합니다. 이것은 샘플입니다. 당신은 그것으로부터 참조를 취할 수 있습니다.

BaseActivity.java 클래스 :

public abstract class BaseActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(getLayoutResource()); 
    } 


    protected abstract int getLayoutResource(); 
} 

ToolBarActivity.java 클래스 :

public abstract class ToolbarActivity extends BaseActivity { 
protected Toolbar toolbar; 


@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    View contentView = findViewById(R.id.flToolbarContentContainer); 
    if (contentView instanceof ViewGroup) { 
     ((ViewGroup) contentView) 
       .addView(LayoutInflater.from(this) 
         .inflate(getToolbarLayoutResource() 
           , (ViewGroup) contentView, false)); 
    } 
    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
} 

@Override 
protected int getLayoutResource() { 
    return R.layout.activity_toolbar; 
} 

protected abstract int getToolbarLayoutResource(); 

public void showToolbar() { 
    toolbar.setVisibility(View.VISIBLE); 
} 

public void hideToolbar() { 
    toolbar.setVisibility(View.GONE); 
} 
} 

activity_toolbar.xml 레이아웃 파일 :

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/rlToolbarContainer" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 


<android.support.v7.widget.Toolbar 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="?attr/actionBarSize" 
    android:layout_toLeftOf="@+id/pbToolbarActivity" 
    android:background="@color/blue_panel_day_background" 
    android:theme="@style/ToolbarTheme" /> 

<FrameLayout 
    android:id="@+id/flToolbarContentContainer" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_below="@id/toolbar" /> 
</RelativeLayout> 

MainActivity.java 클래스 :

public class MainActivity extends ToolbarActivity { 

@Override 
protected int getToolbarLayoutResource() { 
    return R.layout.activity_main; 
} 

@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    homeFragment = HomeFragment.newInstance(); 
    getSupportFragmentManager() 
      .beginTransaction() 
      .replace(R.id.llMainActivityContainer, homeFragment) 
      .commit(); 
} 
} 

activity_main.xml 레이아웃 파일 : 이제

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

</LinearLayout> 

Fragment 클래스에 적용

((ToolbarActivity) getActivity()).showToolbar(); 
((ToolbarActivity) getActivity()).hideToolbar(); 
+0

createNavbar 메소드 란 무엇입니까? – Stepan

+0

오오하! 그것은 '네비게이션 드로어 (Drawing Drawer)'를위한 방법입니다. 필요하지 않습니다. –

0

시도 Fragment에서 ActionBar에 액세스하려면 아래의 방법에

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

이제 수 01의 모든 메소드에 액세스