【问题标题】:Android passing data from an activity to his fragment (viewpager)Android将数据从活动传递到他的片段(viewpager)
【发布时间】:2015-01-16 09:59:25
【问题描述】:

我有一个带有选项卡的 ActionBar,它是片段和 ViewPager。 在 MainActivity 中实现了一个 LocationListener。

如何将位置数据从 MainActivity 传递给 Fragment?

主活动:

public class MainActivity extends FragmentActivity implements ActionBar.TabListener, LocationListener{

ActionBar actionbar;
ViewPager viewpager;
FragmentPageAdapter ft;
public String str="STRING";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    viewpager = (ViewPager) findViewById(R.id.pager);
    ft = new FragmentPageAdapter(getSupportFragmentManager());

    final RunFragment fragment = (RunFragment) ft.getItem(viewpager.getCurrentItem());
    fragment.setTv(str);

    actionbar = getActionBar();
    viewpager.setAdapter(ft);
    actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    actionbar.addTab(actionbar.newTab().setText("Run").setTabListener(this));
    actionbar.addTab(actionbar.newTab().setText("Map").setTabListener(this));
    actionbar.addTab(actionbar.newTab().setText("Statistics").setTabListener(this));
    viewpager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

        @Override
        public void onPageSelected(int arg0) {
        actionbar.setSelectedNavigationItem(arg0);

        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onPageScrollStateChanged(int arg0) {
            // TODO Auto-generated method stub

        }
    });


}

我想在setTv()方法中将位置数据写出Tab的代码:

public class RunFragment extends Fragment {

public TextView tv;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.run_layout, container, false);
    tv =(TextView)view.findViewById(R.id.textView1);

    });


    return view;

}

public void setTv(String string){
    tv.setText(string);
}

}

【问题讨论】:

  • 您可以附加一个捆绑包,它将保存您的数据。
  • 您遇到了什么问题?在将适配器设置为 ViewPager 后也调用fragment.setTv(str);。我的东西onPageSelected 方法在选择第一个片段时也会被调用,所以在onPageSelected 方法中使用fragment.setTv(str);
  • 是的,但是如果我在 setTv() 方法中执行任何操作,Android 就会崩溃,我不知道为什么

标签: android android-activity android-actionbar location fragment


【解决方案1】:

您应该考虑使用事件总线库,例如 Greenrobot EventBus。有了它,您将能够在需要时从您的活动中发送事件对象,并且 Fragment 仅在它处于活动状态时才会接收它们。

【讨论】:

  • 非常感谢这个人!使用易于实现的文档处理活动和片段之间通信的最干净和最有效的方式!点赞!!
  • 如果只有 OP 检查出来!我现在才用!
【解决方案2】:

你可以做类似的事情

// map is a GoogleMap object
map.setMyLocationEnabled(true);

查看this link

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多