2016-06-03 10 views
-3

Ich möchte das Fragment ändern, wenn ich auf die Schaltfläche klicke. Die Fragmente befinden sich im selben Adapter/Viewpager.android onClick Änderung Fragment

VON DIESEM FRAGMENTE:

public class LoginFragment extends Fragment { 

TextView linkToRegister; 

public static final LoginFragment newInstance() 
{ 
    LoginFragment mf = new LoginFragment(); 
    Bundle bd = new Bundle(1); 
    mf.setArguments(bd); 
    return mf; 
} 

public View onCreateView(LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) 
{ 
    View v = inflater.inflate(R.layout.fragment_login, container, false); 

    linkToRegister = (TextView) v.findViewById(R.id.link_to_register); 


    linkToRegister.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // Change Fragment 
     } 
    }); 


    return v; 
} 


} 

an diesem Fragment:

public class RegisterFragment extends Fragment { 

public static final String EXTRA_MESSAGE = "EXTRA_MESSAGE"; 

public static final RegisterFragment newInstance() 
{ 
    RegisterFragment mf = new RegisterFragment(); 
    Bundle bd = new Bundle(1); 
    mf.setArguments(bd); 
    return mf; 
} 

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
    View v = inflater.inflate(R.layout.fragment_register, container, false); 
    return v; 
} 
} 

PagerAdapter:

public class WelcomePagerAdapter extends FragmentStatePagerAdapter { 
private final List<Fragment> Welcomefragments; 

public WelcomePagerAdapter(FragmentManager fm, List<Fragment> Welcomefragments) { 
    super(fm); 
    this.Welcomefragments = Welcomefragments; 
} 

@Override 
public Fragment getItem(int position) { 
    return this.Welcomefragments.get(position); 
} 

@Override 
public int getCount() { 
    return this.Welcomefragments.size(); 
} 
} 

Aktivität:

public class WelcomeActivity extends AppCompatActivity { 
ViewPager welcomeViewPager; 
WelcomePagerAdapter welcomePagerAdapter; 
List<Fragment> welcomeFragments; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_welcome); 


    welcomeViewPager = (ViewPager) findViewById(R.id.viewPagerWelcome); 
    welcomeFragments = getWelcomeFragments(); 
    welcomePagerAdapter = new WelcomePagerAdapter(getSupportFragmentManager(), welcomeFragments); 

    welcomeViewPager.setAdapter(welcomePagerAdapter); 

} 

public List<Fragment> getWelcomeFragments() { 
    List<Fragment> newFragment = new ArrayList<Fragment>(); 
    newFragment.add(LoginFragment.newInstance()); 
    newFragment.add(RegisterFragment.newInstance()); 
    return newFragment; 

} 


} 
+2

Sie ausführen möchten Sie müssen einen Aktivitätsrückruf vom Fragment verwenden, um die Seite des Adapters zu ändern. In diesem Tutorial erfahren Sie, wie das geht. https://developer.android.com/training/basics/fragments/communicating.html –

+0

Hallo, danke für deine Antwort. verstehe immer noch nicht, wie man das macht, kannst du mir das erklären? –

+0

Ein Fragment definiert eine Schnittstelle, dann implementiert Activity diese Schnittstelle und die entsprechenden Methoden. Das Fragment ist an diese Aktivität/Schnittstelle angehängt und kann seine Methoden aufrufen. –

Antwort

0

Schritt 1: Definieren einer Callback-Schnittstelle in das Fragment und Haken in der Aktivität, wenn das Fragment darauf anbringt.

public class MyFragment extends Fragment { 

    public interface OnInteractionListener { 
     void doAction(); // Can include parameters here if needed 
    } 

    private OnInteractionListener listener; 

    @Override 
    public void onAttach(Context context) { 
     if (context instanceof OnInteractionListener) { 
      listener = (OnInteractionListener) context; 
     } else { 
      throw new ClassCastException(context + "must implement " + OnInteractionListener.class.getSimpleName()); 
     } 
     super.onAttach(context); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.fragment_layout, container, false); 
     // ... 
     return v; 
    } 
} 

Schritt 2: Stellen Sie sicher, implementiert Ihre Aktivität, die Schnittstelle

public class MyActivity extends AppCompatActivity implements MyFragment.OnInteractionListener { 

    @Override 
    public void doAction() { 
     // TODO: Implement this... e.g. switch fragments 
    } 

    ... 
} 

Schritt 3: Innerhalb des Fragment, können Sie den Rückruf aufrufen, wenn Sie eine Aktion

if (listener != null) { 
    listener.doAction(); 
} 
+0

Danke, es hat mir sehr geholfen !! :) –