2017-01-11 4 views
0

Fragment으로 앱을 개발 중입니다. 탐색함에 나열되지 않은 곳에 Fragment을 열면 예를 들어, 탐색 조각에 7 개의 조각이 나열되어 있고 탐색 표시기에 다른 조각 (Fragment 이름은 하위 범주 Fragment)이 나열되지 않은 조각이 8 개 있습니다. 아래 코드를 사용하여의 툴바 제목을 변경할 수 있습니다. 하지만 내비게이션 창에 나열되지 않은 Fragment의 툴바 작은 부분을 변경할 수는 없습니다.안드로이드 조각 도구 모음 텍스트가 변경되지 않습니다.

HomeActivity.java

public class HomeActivity extends AppCompatActivity implements FragmentDrawer.FragmentDrawerListener { 
    private Toolbar mToolbar; 
    private FragmentDrawer drawerFragment; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_home); 
     mToolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(mToolbar); 
     getSupportActionBar().setDisplayShowHomeEnabled(true); 
     drawerFragment = (FragmentDrawer) 
       getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer); 
     drawerFragment.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout), mToolbar); 
     drawerFragment.setDrawerListener(this); 

     displayView(0); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public void onDrawerItemSelected(View view, int position) { 
     displayView(position); 
    } 

    public void displayView(int position) { 
     Fragment fragment = null; 
     String title = getString(R.string.app_name); 
     switch (position) { 
      case 0: 
       fragment = new HomeFragment(); 
       title = getString(R.string.title_home); 
       Log.d("LOGTAG", "Home"); 
       break; 
      case 1: 
       fragment = new CategoriesFragment(); 
       title = getString(R.string.title_categories); 
       Log.d("LOGTAG", "Categories"); 
       break; 
      case 2: 
       fragment = new MyOrdersFragment(); 
       title = getString(R.string.title_myorders); 
       Log.d("LOGTAG", "My Orders"); 
       break; 
      case 3: 
       fragment = new WalletFragment(); 
       title = getString(R.string.title_wallet); 
       Log.d("LOGTAG", "Wallet"); 
       break; 
      case 4: 
       fragment = new AccountSettingsFragment(); 
       title = getString(R.string.title_account_settings); 
       Log.d("LOGTAG", "Account Settings"); 
       break; 
      case 5: 
       fragment = new AboutUsFragment(); 
       title = getString(R.string.title_aboutus); 
       Log.d("LOGTAG", "About Us"); 
       break; 
      case 6: 
       fragment = new ContactUsFragment(); 
       title = getString(R.string.title_contactus); 
       Log.d("LOGTAG", "Contact Us"); 
       break; 
      case 7: 
       fragment = new LogOutFragment(); 
       title = getString(R.string.title_logout); 
       Log.d("LOGTAG", "Log out"); 
       break; 
      case 8: 
       fragment = new SubCategoryFragment(); 
       title = getString(R.string.title_sub_categories); 
       Log.d("LOGTAG", "Sub Categories"); 
       break; 
      default: 
       break; 
     } 

     if (fragment != null) { 
      FragmentManager fragmentManager = getSupportFragmentManager(); 
      FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
      fragmentTransaction.replace(R.id.container_body, fragment); 
      fragmentTransaction.commit(); 

      // set the toolbar title 
      getSupportActionBar().setTitle(title); 
     } 
    } 

    public void loadFragment(int id, Fragment fragment) { 
     FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
     ft.replace(id, fragment, fragment.toString()); 
     ft.addToBackStack(null); 
     ft.commit(); 
    } 
} 

그리고

public class SubCategoryFragment extends android.support.v4.app.Fragment { 
    List<GetDataAdapter> GetDataAdapter1; 
    RecyclerView recyclerView; 
    RecyclerView.LayoutManager recyclerViewlayoutManager; 
    RecyclerView.Adapter recyclerViewadapter; 

    String GET_JSON_DATA_HTTP_URL; 
    String JSON_IMAGE_TITLE_NAME = "image_title"; 
    String JSON_IMAGE_URL = "image_url"; 
    String JSON_IMAGE_ID = "id"; 

    JsonArrayRequest jsonArrayRequest ; 
    RequestQueue requestQueue ; 

    public SubCategoryFragment() { 
     // Required empty public constructor 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_sub_category, container, false); 

     HomeActivity activity = new HomeActivity(); 
     activity.displayView(8); //Occuring error 

     // Inflate the layout for this fragment 
     return rootView; 
    } 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
    } 

    @Override 
    public void onDetach() { 
     super.onDetach(); 
    } 
} 

SubCategoryFragment.java 나는이 오류가 표시 하위 카테고리 Fragmentactivity.displayView(8)을 추가 할 때.

java.lang.NullPointerException이 :

그래서 방법을 널 객체 참조에 'android.content.res.Resources의 android.content.Context.getResources()을'가상 메소드를 호출 시도 Toolbar 텍스트를 바꿀 수 있습니까?

+0

이) (부모 활동'HomeActivity 활동 = 새로운 HomeActivity로 통신하는 방법이 아니다; activity.displayView (8); // Occuring error' 당신은 Fragment의 onAttach에서 인터페이스를 사용해야합니다. 그러나 어쨌든 onCreateView에서 어쨌든 Activity 메소드를 호출하려고하는 이유는 무엇입니까? 제 시점은 프래그먼트가 이미 표시되어 있다면 어째서 displayView를 호출해야할까요? –

+0

툴바의 텍스트를 바꾸는 또 다른 방법은 무엇입니까? –

답변

2

당신은 당신이 같은 제목을 설정할 수 있습니다

HomeActivity activity = new HomeActivity(); 
     activity.displayView(8); //Occuring error 
0

의 장소에

((AppCompatActivity)getActivity()).getSupportActionBar().setTitle("sub categories"); 

를 사용할 수 있습니다. 하위 범주 조각에서 :

도구 모음 mtoolbar; 한 OnCreate 감안

() {

mtoolbar = (모음) getActivity.findViewById (R.id.toolbarid);

setSupportAcrionbar (mtoolbar) :

}

그런 onActivityCreated (에서) {

((HomeActvity) getSupportAcrionbar.settitle ("제목"));

}

관련 문제