2015-03-12 2 views
6

Я пытаюсь создать приложение для ношения орхидей, которое имеет только один вид деятельности с одним фрагментом внутри него. Я хочу иметь возможность переключать фрагменты на основе щелчков кнопок или других действий пользователя.Недостаток износа андроидов не работает

Я могу заменить фрагменты просто отлично; однако, когда я прокручиваю с левой стороны экрана в правую сторону экрана. Приложение закрывается. Я ожидал, что этот салфетка будет действовать как кнопка «Назад», а не выйти из приложения.

Основная деятельность

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(); 
    } 
} 

Фрагмент 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; 
    } 
} 

Фрагмент 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); 
} 

Когда я перейти от Fragment1 к FRAGMENT2 с помощью кнопки мыши. Как я могу вернуться к Fragment1 без выхода из приложения?

+0

Вы нашли решение? –

ответ

0

Существует потенциально опасное решение, которое вы можете использовать, если вместо этого вы используете класс GridViewPager. Он позволяет прокручивать назад, чтобы просмотреть предыдущий контент. Вам нужно будет обновить представления при прокрутке, чтобы имитировать динамический backstack, но это можно сделать.

1

Одно решения было бы обернуть второй макет внутри

android.support.wearable.view.SwipeDismissFrameLayout

Затем вы можете захватить распускать жест и внутри вызова родительской активности getFragmentManager().popBackStack();

вы можете установить слушатель на SwipeDismissFrameLayout как так: swipeFrame.setDismissEnabled(true); swipeFrame.setOnDismissedListener(new SwipeDismissLayout.OnDismissedListener() { @Override public void onDismissed(SwipeDismissLayout swipeDismissLayout) { getActivity().getFragmentManager().popBackStack(); } });