繁体   English   中英

选项卡式活动中片段之间的相互作用

[英]Interaction between fragments in Tabbed activity

我正在尝试Tabbed活动中两个片段之间的简单交互。

我有两个TextViewEditTextButton布局。 我试图实现当按下FragmentOne中的Button时,将文本从FragmentOne中的EditText移动到Fragment 2中的EdidText (或TextView )。 但它不起作用。

在调试过程中没有任何问题。 应用程序不会停止工作。

ViewPagerSectionsPagerAdapter问题吗?

我有这两个片段。 片段一:

public class FragmentOne extends Fragment {

TextView textView;
EditText editText;
Button button;

private OnFragmentOneInteractionListener mListener;

public FragmentOne()
{
    // Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState)
{
    View view = inflater.inflate(R.layout.fragment_one, container, false);
    editText = (EditText) view.findViewById(R.id.fragOne_txb);
    textView = (TextView) view.findViewById(R.id.fragTwo_header);
    button = (Button) view.findViewById(R.id.fragOne_btn_to2);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v)
        {
            String text = editText.getText().toString();
            mListener.onFragmentOneInteraction(text);
        }
    });
    return view;
}

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    if (context instanceof OnFragmentOneInteractionListener) {
        mListener = (OnFragmentOneInteractionListener) context;
    } else {
        throw new RuntimeException(context.toString()
                + " must implement OnFragmentOneInteractionListener");
    }
}

@Override
public void onDetach() 
{
    super.onDetach();
    mListener = null;
}

public interface OnFragmentOneInteractionListener
{
    void onFragmentOneInteraction(String string);
}

}

和片段二:

public class FragmentTwo extends Fragment{

private OnFragmentTwoInteractionListener mListener;

public EditText editText;

public FragmentTwo()
{
    // Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
                         Bundle savedInstanceState)
{
    View view = inflater.inflate(R.layout.fragment_two, container, false);
    editText = (EditText) view.findViewById(R.id.fragTwo_txb);
    return view;
}

public void onUpdateEditText(String string)
{
    this.editText.setText(string);
}

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    if (context instanceof OnFragmentTwoInteractionListener) {
        mListener = (OnFragmentTwoInteractionListener) context;
    } else {
        throw new RuntimeException(context.toString()
                + " must implement OnFragmentTwoInteractionListener");
    }
}

@Override
public void onDetach()
{
    super.onDetach();
    mListener = null;
}

public interface OnFragmentTwoInteractionListener
{
    void onFragmentTwoInteraction(Uri uri);
}

}

这是我的主要活动:

public class MainActivity extends AppCompatActivity 
                      implements FragmentOne.OnFragmentOneInteractionListener,
                                 FragmentTwo.OnFragmentTwoInteractionListener
{
private SectionsPagerAdapter mSectionsPagerAdapter;

private ViewPager mViewPager;

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

    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

    mViewPager = (ViewPager) findViewById(R.id.container);
    mViewPager.setAdapter(mSectionsPagerAdapter);

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);

    mViewPager.addOnPageChangeListener(
                   new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    tabLayout.addOnTabSelectedListener(
                   new TabLayout.ViewPagerOnTabSelectedListener(mViewPager));
}

@Override
public void onFragmentOneInteraction(String string)
{
    FragmentTwo fr2 = (FragmentTwo) getSupportFragmentManager().findFragmentById(R.id.fr2);
    fr2.onUpdateEditText(string);
}

@Override
public void onFragmentTwoInteraction(Uri uri) 
{

}

public class SectionsPagerAdapter extends FragmentPagerAdapter
{

    public SectionsPagerAdapter(FragmentManager fm)
    {
        super(fm);
    }

    @Override
    public Fragment getItem(int position)
    {
        switch (position)
        {
            case 0:
                FragmentOne fragmentOne = new FragmentOne();
                return fragmentOne;

            case 1:
                FragmentTwo fragmentTwo = new FragmentTwo();
                return fragmentTwo;

            default:
                return null;
        }
    }

    @Override
    public int getCount()
    {
        // Show 2 total pages.
        return 2;
    }
}
}

我刚刚尝试了您的代码,这是我所做的更新,以使其正常运行。 如果您正在寻找它,请标记为正确

private SectionsPagerAdapter mSectionsPagerAdapter;

private ViewPager mViewPager;

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

    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

    mViewPager = (ViewPager) findViewById(R.id.container);
    mViewPager.setAdapter(mSectionsPagerAdapter);

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);

    mViewPager.addOnPageChangeListener(
            new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    tabLayout.addOnTabSelectedListener(
            new TabLayout.ViewPagerOnTabSelectedListener(mViewPager));
}

@Override
public void onFragmentOneInteraction(String string)
{
    fragmentTwo.onUpdateEditText(string);

    /*FragmentTwo fr2 = (FragmentTwo) getSupportFragmentManager().findFragmentById(R.id.fr2);
    fr2.onUpdateEditText(string);*/
}

@Override
public void onFragmentTwoInteraction(Uri uri)
{
}

FragmentTwo fragmentTwo = new FragmentTwo();

public class SectionsPagerAdapter extends FragmentPagerAdapter
{

    public SectionsPagerAdapter(FragmentManager fm)
    {
        super(fm);
    }

    @Override
    public Fragment getItem(int position)
    {
        switch (position)
        {
            case 0:
                FragmentOne fragmentOne = new FragmentOne();
                return fragmentOne;

            case 1:

                return fragmentTwo;

            default:
                return null;
        }
    }

    @Override
    public int getCount()
    {
        // Show 2 total pages.
        return 2;
    }
}

我建议使用getActivity()代替

if (getActivity() instanceof OnFragmentOneInteractionListener) {
    mListener = (OnFragmentOneInteractionListener) getActivity();
} else {
    throw new RuntimeException(context.toString()
            + " must implement OnFragmentOneInteractionListener");
}

暂无
暂无

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

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