从 TableLayout 中的当前片段中获取信息

Get information from current fragment in TableLayout

我正在使用 TabLayout 并且 ViewPager.I 成功地集成了它并从 fragments.This 使用了我的 mainTabActivity java class

public class MainTabActivity extends AppCompatActivity {
private CustomTabLayout tabLayout;
private ViewPager viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_simple_tabs);
    viewPager = (ViewPager) findViewById(R.id.viewpager);
    setupViewPager(viewPager);

    tabLayout = (CustomTabLayout)findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(viewPager);
    findViewById(R.id.tab_ticket).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent=new Intent(MainTabActivity.this, TicketsActivity.class);
            startActivity(intent);
            overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);

        }
    });
    findViewById(R.id.tab_main).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Log.e("BottomClickAction","BottomClickAction");

        }
    });

}
private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(new OneWayFragment(), "ONE");
    adapter.addFragment(new TwoFragment(), "ROUND");
    viewPager.setAdapter(adapter);
}

class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }

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

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

    public void addFragment(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }
}

} 我也有自定义底部 bar.Now 我试图解释我的 problem.In 我的片段包含一些元素,例如微调器,文本视图或 etc.My 问题 is:How 我从当前片段中获取信息时我点击底栏?我的意思是,spinner 的数据信息,Textview 的 gettext 等等。 我该如何解决我的问题?是否可以不使用静态变量?

您可以在 viewpager 中找到片段 OneWayFragment,如下所示:

public OneWayFragment getOneWayFragment() {
        return (OneWayFragment) getSupportFragmentManager().findFragmentByTag(
                "android:switcher:" + R.id.viewPager + ":" + 0);
    }

public TwoFragment getTwoFragment() {
            return (TwoFragment) getSupportFragmentManager().findFragmentByTag(
                    "android:switcher:" + R.id.viewPager + ":" + 1);
        }

您可以从 OneWayFragmentTwoFragment 访问 public 方法获取您想要的数据。

例如,从 OneWayFragment:

创建方法 getText
public String getData() {
     return tv.getText().toString();
}

并在您的 MainTabActivity 中。例如,您单击按钮的 ID 为 tab_main,您从 OneWayFragment.

获取数据
findViewById(R.id.tab_main).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Log.e("BottomClickAction","BottomClickAction");
            OneWayFragment fragment = getOneWayFragment();
            if(fragment != null) {
               String data = fragment.getData();
             }
        }
    });

在片段中创建自己的方法,如 getFragmentData()。随时访问此方法。你的情况:

1) 引用你的片段 _oneWayaFrgament= 新的 OneWayFragment() adapter.addFragment(_oneWayaFrgament, "ONE");

2) 调用 _oneWayaFrgament.getFragmentData()

类似地在 TwoFragment 上应用您的条件逻辑。

请通过识别当前片段调用 getFragmentData()。

是的,您可以在您的片段中包含 public 个变量和方法,然后您可以设置和获取您的变量或从您的 activity 中调用您的方法。 例如在你的片段中:

public String myString;
public Button someButton;

 public void fillMyTextView(){//some codes};

并且在您的 activity 中,您可以像这样调用这些方法或访问您的视图:

myFragment.fillMyTextView("hello");
myFragment.someButton.setText("my btn");

我建议您将单例创建为状态对象(根据需要作为视图的状态,您可以使用整数或短字节或字节作为状态标记内存)随心所欲地使用,并在完成使用后取消.通过这种方式,您可以在任何时间点访问任何片段或 activity 中的任何数据。您也可以使用其他实现,例如接口类型,因为设计和架构 way.But 取决于状态的重要性。