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

时间:2017-03-15 07:52:45

标签: java android android-viewpager android-tablayout

我正在使用TabLayout和ViewPager.I成功集成它并从片段中使用。这是我的mainTabActivity java类

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

} 我也有自定义底栏。现在我试着解释我的问题。在我的片段包含一些元素,来自示例微调,Textviews等。我的问题是:当我点击底栏时,我如何从当前片段获取信息?我的意思是,spinner'data信息,Textview的gettext等。 我怎么能解决我的问题?是不是可以不使用静态变量?

4 个答案:

答案 0 :(得分:0)

您可以在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访问公共方法获取所需的数据。

例如,从OneWayFragment创建方法getText:

public String getData() {
     return tv.getText().toString();
}

在你的MainTabActivity中。例如,您点击按钮的标识为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();
             }
        }
    });

答案 1 :(得分:0)

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

1)参考你的片段 _oneWayaFrgament = new OneWayFragment()  adapter.addFragment(_oneWayaFrgament,“ONE”);

2)调用_oneWayaFrgament.getFragmentData()

同样在TwoFragment上应用条件逻辑。

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

答案 2 :(得分:0)

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

public String myString;
public Button someButton;

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

在您的活动中,您可以调用这些方法或访问您的观点,如下所示:

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

答案 3 :(得分:0)

我建议你创建单例作为状态对象(你想要作为视图的状态,你可以使用整数或短或字节用于状态标记内存)根据需要使用,并在完成使用后无效。这样,您可以随时访问任何片段或活动中的任何数据。您可以使用其他实现,如界面类型作为设计和架构方式。但取决于状态的重要性。