android onClick更改片段

时间:2016-06-03 00:53:20

标签: android fragmenttransaction

我想在点击按钮时更改片段。片段位于同一个适配器/ viewpager中。

来自此片段:

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


}

到这段时间:

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

活动:

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 个答案:

答案 0 :(得分:1)

步骤1:在Fragment中定义一个回调接口,并在Fragment附加到Activity时挂钩。

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

步骤2:确保您的Activity实现了该接口

public class MyActivity extends AppCompatActivity implements MyFragment.OnInteractionListener {

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

    ...
}

步骤3:在片段内部,您可以在需要执行某些操作时调用回调

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

答案 1 :(得分:0)

MainActivity() 获取 navController,然后使用 navigate() 函数:

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