Android Wear Lack

I am trying to create a wear android application that has only one action with one fragment inside it. I want to be able to switch fragments based on button clicks or other user actions.

I can replace the fragments just fine; however, when I scroll from the left side of the screen to the right side of the screen. The application is closing. I expected this to act as a back button, rather than exit the application.

Primary activity

import android.support.v4.app.Fragment; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.support.wearable.view.WatchViewStub; public class MainActivity extends FragmentActivity implements FragmentChangeListener { int fragmentContainerId; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_activity); final WatchViewStub stub = (WatchViewStub)findViewById(R.id.watch_view_stub); // instialize the fragment to the loading page stub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() { @Override public void onLayoutInflated(WatchViewStub watchViewStub) { fragmentContainerId = R.id.fragmentContainer; if (watchViewStub.findViewById(R.id.fragmentContainer) != null) { Fragment1 fragment1= new Fragment1 (); // In case this activity was started with special instructions from an Intent, // pass the Intent extras to the fragment as arguments fragment1.setArguments(getIntent().getExtras()); // Add the fragment to the 'fragment_container' FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); fragmentTransaction.add(R.id.fragmentContainer, fragment1).addToBackStack(null); fragmentTransaction.commit(); } } }); } @Override public void replaceFragment(Fragment fragment) { FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.fragmentContainer, fragment, fragment.toString()).addToBackStack(null); System.out.println("Entry count in backstack is: " + fragmentManager.getBackStackEntryCount()); fragmentTransaction.commit(); } } 

Fragment 1

 import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; public class Fragment1 extends Fragment { public Fragment1() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment1, container, false); Button button1= (Button)view.findViewById(R.id.button1); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Fragment2 fragment2= new Fragment2 (); FragmentChangeListener fc=(FragmentChangeListener)getActivity(); fc.replaceFragment(fragment2); } }); return view; } } 

Fragment 2

 import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; /** * A simple {@link Fragment} subclass. */ public class Fragment2 extends Fragment { public Fragment2() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View v =inflater.inflate(R.layout.fragment2, container, false); return v; } } 

FragmentChangeListner

 import android.support.v4.app.Fragment; public interface FragmentChangeListener { public void replaceFragment(Fragment fragment); } 

When I move from Fragment1 to Fragment2 with a click of a button. How to return to Fragment1 without exiting the application?

+6
source share
2 answers

One solution would be to wrap your second layout inside

android.support.wearable.view.SwipeDismissFrameLayout

Then you can lock the dismissal gesture inside the parent activity getFragmentManager().popBackStack();

you can set the listener on SwipeDismissFrameLayout as follows: swipeFrame.setDismissEnabled(true); swipeFrame.setOnDismissedListener(new SwipeDismissLayout.OnDismissedListener() { @Override public void onDismissed(SwipeDismissLayout swipeDismissLayout) { getActivity().getFragmentManager().popBackStack(); } }); swipeFrame.setDismissEnabled(true); swipeFrame.setOnDismissedListener(new SwipeDismissLayout.OnDismissedListener() { @Override public void onDismissed(SwipeDismissLayout swipeDismissLayout) { getActivity().getFragmentManager().popBackStack(); } });

+1
source

There is a potentially dangerous solution that you can use if you are using the GridViewPager class instead. It allows you to scroll back to view previous content. You will need to refresh the views when scrolling to simulate a dynamic backstack, but this can be done.

0
source

Source: https://habr.com/ru/post/983705/


All Articles