2017-09-27 6 views
-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番目のボタンの表示が完全にクリアされます。私は対応する断片で活動を終わらせる方法について質問しました。

答えて

0

単にあなたの活動に

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    Intent intent = new Intent(context, Activity_YourNeed.class) ; 
    startActivity(intent); 
    finish(); 
} 
+0

をonBackPressedメソッドをオーバーライドし、あなたは私の活動がSingleFragmentActivityまで伸びていることがわかりました。では、どうすれば可能になるのでしょうか? –

関連する問題