0

조각으로 만 만들려고합니다. 햄버거 아이콘을 클릭하면 ActionBar 만있는 Activity blank가 열리고 메뉴 옵션을 제공하는 서랍이 열립니다.fragmentB에서 fragmentA까지 액션 바 업 그레 이드

메뉴 항목 중 하나를 클릭하면 Recycler/Card View가있는 First Fragment가 열립니다. 카드 중 하나를 클릭하면 선택한 카드에 대한 세부 정보가 포함 된 새로운 조각이 열립니다.

이제는 세부 조각에 홈 아이콘이 표시되어 setDisplayHomeAsUpEnabled (true)를 사용할 수 있지만 뒤로 화살표를 클릭해도 아무 것도하지 않습니다. 하드웨어 백 버튼은 이전 (Recycler/Card View) 프래그먼트로 돌아갑니다. 또한 세부 조각에 setHasOptionsMenu (true)가 있습니다. 로그 버튼을 사방에 배치하여 홈 버튼이 반응하지만 아무 것도 볼 수 없습니다.

누군가 나를 도와 줄 수 있기를 바랍니다.

활동 :

public class AppStart extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { 

ActionBarDrawerToggle actionBarDrawerToggle; 
final String TAG = "AppSart: onBackPressed"; 
final String TAG1 = "AppSart: resetActionBar"; 

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

@Override 
public void onBackPressed() { 
    int stack = getSupportFragmentManager().getBackStackEntryCount(); 
    Log.d(TAG,Integer.toString(stack)); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    return super.onCreateOptionsMenu(menu); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    return false; 
} 

public void resetActionBar(boolean childAction) 
{ 
    Log.d(TAG1,Boolean.toString(childAction)); 
    if (childAction) { 
     actionBarDrawerToggle.setDrawerIndicatorEnabled(false); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    } else { 
     getSupportActionBar().setDisplayHomeAsUpEnabled(false); 
     actionBarDrawerToggle.setDrawerIndicatorEnabled(true); 
    } 
} 
} 

휴지통 조각 :

public class ProductFragment extends Fragment { 

final String TAG1 = "ProdFrag: onCreate"; 
final String TAG2 = "ProdFrag: onCreateView"; 
final String TAG3 = "ProdFrag: onResume"; 
final String TAG6 = "ProdFrag: ActionSetting"; 
final String TAG7 = "ProdFrag: home"; 

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

@Override 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setHasOptionsMenu(true); 
    int stack = getActivity().getSupportFragmentManager().getBackStackEntryCount(); 
    Log.d(TAG1,Integer.toString(stack)); 
    boolean canback = stack>0; 
    ((AppStart)getActivity()).resetActionBar(canback); 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    int stack = getActivity().getSupportFragmentManager().getBackStackEntryCount(); 
    Log.d(TAG3,Integer.toString(stack)); 
    boolean canback = stack>0; 
    ((AppStart)getActivity()).resetActionBar(canback); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View view=inflater.inflate(R.layout.fragment_product,container,false);   
    int stack = getActivity().getSupportFragmentManager().getBackStackEntryCount(); 
    Log.d(TAG2,Integer.toString(stack)); 
    return view; 
} 

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    inflater.inflate(R.menu.toolbar_menu, menu); 
    super.onCreateOptionsMenu(menu,inflater); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int stack = getActivity().getSupportFragmentManager().getBackStackEntryCount(); 
    switch (item.getItemId()) { 
     case R.id.action_settings: 
      Log.d(TAG6,Integer.toString(stack)); 
      return true; 
     default: 
      break; 
    } 
    return false; 
} 
} 

상세 조각 :

public class ProductTabsFragment extends Fragment { 

final String TAG1 = "TabFrag: onCreate"; 
final String TAG2 = "TabFrag: onResume"; 
final String TAG3 = "TabFrag: ActionSettings"; 
final String TAG4 = "TabFrag: home"; 
final String TAG5 = "TabFrag: onBckStkChng"; 
final String TAG6 = "TabFrag: onNavigateUp"; 

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

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setHasOptionsMenu(true); 
    int stack = getActivity().getSupportFragmentManager().getBackStackEntryCount(); 
    Log.d(TAG1,Integer.toString(stack)); 
    boolean canback = stack>0; 
    ((AppStart)getActivity()).resetActionBar(canback); 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    int stack = getActivity().getSupportFragmentManager().getBackStackEntryCount(); 
    Log.d(TAG2,Integer.toString(stack)); 
    boolean canback = stack>0; 
    ((AppStart)getActivity()).resetActionBar(canback); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    return inflater.inflate(R.layout.fragment_product_tabs, container, false); 
} 

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    inflater.inflate(R.menu.toolbar_menu, menu); 
    super.onCreateOptionsMenu(menu,inflater); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int stack = getActivity().getSupportFragmentManager().getBackStackEntryCount(); 
    switch (item.getItemId()) { 
     case R.id.action_settings: 
      Log.d(TAG3,Integer.toString(stack)); 
      return true; 
     case android.R.id.home: 
      Log.d(TAG4,Integer.toString(stack)); 
      //getActivity().onBackPressed(); 
      return true; 
     default: 
      break; 
    } 
    return false; 
} 

} 

또한,이 카드가로드를 클릭 때의 재활용 어댑터의 코드가있다 세부 조각 :

cvProduct.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View view) { 
       ProductTabsFragment productTabsFragment = new ProductTabsFragment(); 
       AppCompatActivity activity = (AppCompatActivity) view.getContext(); 
       FragmentTransaction transaction = activity.getSupportFragmentManager().beginTransaction(); 
       transaction.replace(R.id.fragment_container,productTabsFragment); 
       transaction.addToBackStack(null); 
       transaction.commit(); 
      } 
     }); 

답변

0

이 문제가있는 사용자. ActionBarDrawerToggle이 사용될 때 backarrow에 setToolbarNavigationClickListener를 사용해야한다고 밝혀졌습니다.

optionitemselected의 Rididome이 비활성화 된 것처럼 보입니다. 희망이 도움이!

case android.R.id.home: 
     Log.d(TAG4,Integer.toString(stack)); 
     return true; 

및 fragmentA 및 fragmentB의 한 OnCreate에서 호출되는 주요 활동에 resetActionBar (부울 childAction를) 수정 :

그래서 내가 한 것은 onOptionsItemSelected (MenuItem의 항목)에서 제거했다.

public void resetActionBar(boolean childAction) 
{ 
    Log.d(TAG1,Boolean.toString(childAction)); 
    if (childAction) { 
     actionBarDrawerToggle.setDrawerIndicatorEnabled(false); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     getSupportActionBar().setHomeButtonEnabled(true); 
     actionBarDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View v) { 
       Log.d(TAG4,"Clicked"); 
       onBackPressed(); 
      } 
     }); 
    } else { 
     getSupportActionBar().setHomeButtonEnabled(false); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(false); 
     actionBarDrawerToggle.setDrawerIndicatorEnabled(true); 
    } 
} 
관련 문제