-1
断片トランザクションアクティビティがSharedPrefrenceに基づいて別のフラグメントにアタッチされているときに、バックプレスを処理する方法はありますか?
public abstract class SingleFragmentActivity extends AppCompatActivity {
protected abstract Fragment createFragment();
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragment);
FragmentManager fragmentManager = getSupportFragmentManager();
Fragment fragment = fragmentManager.findFragmentById(R.id.fragment_container);
if (fragment == null) {
fragment = createFragment();
fragmentManager
.beginTransaction()
.add(R.id.fragment_container, fragment)
.commit();
}
}
}
活性に対応するためのこのコードハンドルフラグメントトランザクションを処理するためSingleFragment Activityクラス。私はこの
public class DashboardActivity extends SingleFragmentActivity{
@Override
protected Fragment createFragment() {
return new DashboardFragment().newInstance();
}
}
のような単一のフラグメント活動にActivityクラスを拡張すると今の断片の新しいインスタンスは、保存された共有prefrenceに基づいて、ボタンの表示を保持しています。
public class DashboardFragment extends Fragment {
private SessionManager sessions;
private Button buttonAddCustomer, buttonViewCustomer;
private Button buttonAddService, buttonViewTabbedCustomer;
private LinearLayout linearAdmin, linearCustomer;
public Fragment newInstance() {
return new DashboardFragment();
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sessions = new SessionManager(getActivity());
setHasOptionsMenu(true);
sessions.checkLogin();
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_dashboard, container, false);
linearCustomer = view.findViewById(R.id.user_panel);
linearAdmin = view.findViewById(R.id.admin_panel);
buttonAddService = view.findViewById(R.id.btn_add_service);
buttonViewTabbedCustomer = view.findViewById(R.id.btn_customer_tab);
buttonAddCustomer = view.findViewById(R.id.btn_add_customer);
buttonViewCustomer = view.findViewById(R.id.btn_customer_final);
if (SharedHelper.getSP(getActivity(), "emp_type").equalsIgnoreCase("admin")) {
buttonAddService.setVisibility(View.VISIBLE);
buttonViewTabbedCustomer.setVisibility(View.VISIBLE);
//Visibility Gone
buttonAddCustomer.setVisibility(View.INVISIBLE);
buttonViewCustomer.setVisibility(View.INVISIBLE);
} else if (SharedHelper.getSP(getActivity(), "emp_type").equalsIgnoreCase("user")) {
buttonAddCustomer.setVisibility(View.VISIBLE);
buttonViewCustomer.setVisibility(View.VISIBLE);
//Visibility Gone
buttonAddService.setVisibility(View.INVISIBLE);
buttonViewTabbedCustomer.setVisibility(View.INVISIBLE);
}
return view;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.menu_dash, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.logout:
sessions.logoutUser();
}
return super.onOptionsItemSelected(item);
}
}
は、今私は、ログイン管理者側のボタンを共有好みに保存されている管理者の種類が示されていたとき、ユーザーに共有好ましいのは、ビューを対応する共有プリファレンスを保存しているときに問題がある非表示にしていると示されており、バックプレスボタンがクリックされたときに、ボタンの表示が2回繰り返され、3番目のボタンの表示が完全にクリアされます。私は対応する断片で活動を終わらせる方法について質問しました。
をonBackPressedメソッドをオーバーライドし、あなたは私の活動がSingleFragmentActivityまで伸びていることがわかりました。では、どうすれば可能になるのでしょうか? –