簡體   English   中英

我如何使用interface.b共享數據黑白片段,我想在片段2的文本視圖中單擊打開按鈕單擊片段1中的編輯文本數據

[英]How can i share data b/w fragments using interface.i want the on button click Edit Text's data in fragment1 to be shown in the text view of fragment2

主班是

public class MainActivity extends AppCompatActivity implements TabLayout.OnTabSelectedListener, MyInterface {

    ViewPager vp;
    TabLayout tabLayout;

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

        vp = (ViewPager) findViewById(R.id.mViewpager_ID);
        this.addPages();
        tabLayout = (TabLayout) findViewById(R.id.mTab_ID);
        tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
        tabLayout.setupWithViewPager(vp);
        tabLayout.setOnTabSelectedListener(this);
    }

    private void addPages() {
        MyPagerAdapter pagerAdapter = new MyPagerAdapter(this.getSupportFragmentManager());
        pagerAdapter.addFragment(new Fragment1());
        pagerAdapter.addFragment(new Fragment2());
        pagerAdapter.addFragment(new Fragment3());
        vp.setAdapter(pagerAdapter);
    }

    public void onTabSelected(TabLayout.Tab tab) {
        vp.setCurrentItem(tab.getPosition());
    }
    @Override
    public void onTabUnselected(TabLayout.Tab tab) {
    }

    @Override
    public void onTabReselected(TabLayout.Tab tab) {
    }
    @Override
    public String setOnDataChangedListener(String Text) {
    return Text;
    }
    @Override
    public void onFragmentChanged(int value) {
        if (value == 0) {
            vp.setCurrentItem(value);
            }
            if (value == 1) {
            vp.setCurrentItem(value);
             }
          if (value == 2) {
            vp.setCurrentItem(value);
        }
    }}

Fragment1是:

public class Fragment1 extends Fragment {
    private MyInterface obj;
    String a;
    Context c;
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        obj = (MyInterface) context;
          }
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView=inflater.inflate(R.layout.activity_fragment1,container,false);
        EditText edttext=(EditText)rootView.findViewById(R.id.edttxt);
        final String data=edttext.getText().toString();
        a="testing_communication";
        Button btn=(Button)rootView.findViewById(R.id.button);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                obj.setOnDataChangedListener(data);
                obj.onFragmentChanged(1);
             } 
           });
        return rootView;
    }
    @Override
    public String toString() {
        String title="Fragment:1";
        return title;}}

Fragment2是..

public class Fragment2 extends Fragment implements MyInterface {
@Nullable

TextView tv;
String text;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View bootView2=inflater.inflate(R.layout.activity_fragment2,container,false);
    tv = (TextView) bootView2.findViewById(R.id.textv);
    setOnDataChangedListener(text);
    tv.setText(text);
    return bootView2;

}

@Override
public String toString() {
    String title="Fragment:2";
    return title;
}

@Override
public String setOnDataChangedListener(String Text) {
return Text;
}
@Override
public void onFragmentChanged(int value) {
 }
 }

界面是:

public interface MyInterface {
String setOnDataChangedListener(String Text);
void onFragmentChanged(int value);}

Pageadabter是:

public class MyPagerAdapter extends FragmentPagerAdapter {
ArrayList<Fragment> fragments=new ArrayList<>();
public MyPagerAdapter(FragmentManager fm) {
    super(fm);
}
@Override
public Fragment getItem(int position) {
    return fragments.get(position);
}
@Override
public int getCount() {
    return fragments.size();
}
public void addFragment(Fragment f)
{
    fragments.add(f);
}
@Override
public CharSequence getPageTitle(int position) {
    String title=fragments.get(position).toString();
    return title.toString();
}}

在按鈕上單擊fragment1,我可以移動到fragment2,但是不能移動數據。它似乎在onclicklistener主體obj.onFragmentChanged(1)下的fragment1中; 工作正常。但是obj.setOnDataChangedListener(data。); 無法正常工作..如果有人可以提供幫助,我將非常感謝您。

這里有很多問題。 導致此問題的兩個主要原因

首先,在Fragment1中,將上下文轉換為MyInterface並使用它來設置數據。 在這種情況下,上下文將是包含Fragment1而不是Fragment2的活動

其次,您的setDataChangedListener基本上不執行任何操作。 它接收一個String,然后返回相同的東西,而無需將其存儲在任何地方。

您需要Fragment2來實現setDataChangedListener,接收一個String,然后將其存儲在類變量中。

您真的要使用界面共享數據嗎? 您可以使用BundleMainActivity的公共字段共享數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM