简体   繁体   English

android onClick 更改片段

[英]android onClick change fragment

I want to change the Fragment when i click the button.我想在单击按钮时更改 Fragment。 The fragments are in the same adapter/viewpager.这些片段位于同一个适配器/viewpager 中。

FROM THIS FRAGMENT:从这个片段:

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


}

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

Activity:活动:

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;

}


}

Step 1: Define a callback interface in the Fragment and hook in the Activity when the Fragment attaches to it.第一步:在Fragment中定义一个回调接口,当Fragment附加到它时,在Activity中hook。

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

Step 2: Make sure your Activity implements that Interface第 2 步:确保您的 Activity 实现了该接口

public class MyActivity extends AppCompatActivity implements MyFragment.OnInteractionListener {

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

    ...
}

Step 3: Inside the Fragment, you can invoke the callback whenever you want to perform some action第 3 步:在 Fragment 内部,您可以在想要执行某些操作时调用回调

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

From MainActivity() , get the navController and then use the navigate() function:MainActivity()获取navController ,然后使用navigate()函数:

NavController navController = Navigation.findNavController(this,R.id.nav_host_fragment);
navController.navigate(R.id.nav_grid);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM