2015-03-12 20 views
6

Próbuję stworzyć aplikację Android Wear, która ma tylko jedno działanie z jednym fragmentem w środku. Chcę móc przełączać fragmenty na podstawie kliknięć przycisków lub innych działań użytkownika.Ubrania z Androidem nie działają pod kontrolą.

Mogę wymienić fragmenty w porządku; jednak po przesunięciu z lewej strony ekranu na prawą stronę ekranu. Aplikacja zamyka się. Oczekiwałem, że to przesunięcie działa jak przycisk Wstecz i nie opuszcza aplikacji.

Główna aktywność

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's 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); 
} 

Kiedy nawigacja z Fragment1 do Fragment2 poprzez kliknięcie przycisku. Jak mogę wrócić do fragmentu 1 bez wychodzenia z aplikacji?

+0

czy znalazłeś już rozwiązanie? –

Odpowiedz

0

Istnieje potencjalnie zhakowskie rozwiązanie, którego można użyć, jeśli rozważa się użycie klasy GridViewPager. Pozwala przesuwać do tyłu, aby wyświetlić poprzednią zawartość. Podczas przesuwania trzeba odświeżyć widoki, aby zasymulować dynamiczny backstack, ale można to zrobić.

1

Jednym rozwiązaniem byłoby owinąć drugi układ wewnątrz

android.support.wearable.view.SwipeDismissFrameLayout

Następnie można uchwycić gest odwoływania i wewnątrz wywołania aktywności rodzic getFragmentManager().popBackStack();

można ustawić słuchacza na SwipeDismissFrameLayout jak więc: swipeFrame.setDismissEnabled(true); swipeFrame.setOnDismissedListener(new SwipeDismissLayout.OnDismissedListener() { @Override public void onDismissed(SwipeDismissLayout swipeDismissLayout) { getActivity().getFragmentManager().popBackStack(); } });

Powiązane problemy