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
나는이 오류가 표시 하위 카테고리 Fragment
에 activity.displayView(8)
을 추가 할 때.
java.lang.NullPointerException이 :
그래서 방법을 널 객체 참조에 'android.content.res.Resources의 android.content.Context.getResources()을'가상 메소드를 호출 시도 Toolbar
텍스트를 바꿀 수 있습니까?
이) (부모 활동'HomeActivity 활동 = 새로운 HomeActivity로 통신하는 방법이 아니다; activity.displayView (8); // Occuring error' 당신은 Fragment의 onAttach에서 인터페이스를 사용해야합니다. 그러나 어쨌든 onCreateView에서 어쨌든 Activity 메소드를 호출하려고하는 이유는 무엇입니까? 제 시점은 프래그먼트가 이미 표시되어 있다면 어째서 displayView를 호출해야할까요? –
툴바의 텍스트를 바꾸는 또 다른 방법은 무엇입니까? –