Android 跨应用传递数据

标签 android persistent-storage

我有一个 ListView ,其中有一个位置列表 - 我有 ListView 每一行的 ID、名称和位置。我的数据存储在本地的 sqlite 中。

当用户点击某个特定地点时,我想在下一个屏幕中显示该特定地点的详细信息,其结构如下

  • 承载两个 fragment 的 fragment Activity
  • 第一个 fragment 在顶部有一个 Viewpager 指示器,在其下方有一个信息。
  • 第二个 Fragment 托管一个在 map 上显示地点的 Google map 。

所以我需要知道用户在三个不同的 Activity 和 Fragments 中选择的位置。

用户应该能够返回并选择一个新的地方,并且应该能够再次传递。

PlaceActivity.java 需要Place的ID

public class PlaceActivity extends SherlockFragmentActivity implements
        OnShareTargetSelectedListener {

    private PlaceMapsFragment fragment_maps = null;
    private PlaceDetailsFragment fragment_details = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_place);

        ActionBar actionBar = getSupportActionBar();
        actionBar.setHomeButtonEnabled(true);
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setTitle("Nandi Hills");
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        ActionBar.Tab tabMaps = actionBar.newTab();
        ActionBar.Tab tabDetails = actionBar.newTab();

        tabDetails.setText("Details");
        tabMaps.setText("Maps");

        tabDetails.setTabListener(new PlaceTabListener());
        tabMaps.setTabListener(new PlaceTabListener());

        actionBar.addTab(tabDetails);
        actionBar.addTab(tabMaps);

    }

    private class PlaceTabListener implements ActionBar.TabListener {
        @Override
        public void onTabSelected(Tab tab,
                android.support.v4.app.FragmentTransaction ft) {
            ft.setCustomAnimations(android.R.anim.fade_in,
                    android.R.anim.fade_out);
            // TODO Auto-generated method stub

            if (tab.getPosition() == 0) {

                if (fragment_details == null) {
                    fragment_details = new PlaceDetailsFragment();
                    ft.add(R.id.fragment_container, fragment_details,
                            PlaceDetailsFragment.TAG);
                } else {

                    ft.show(fragment_details);
                }
            } else {
                if (fragment_maps == null) {
                    // fragment_maps = new PlaceMapsFragment();
                    fragment_maps = PlaceMapsFragment.newInstance(new LatLng(
                            13.005621, 77.577531));
                    ft.add(R.id.fragment_container, fragment_maps,
                            PlaceMapsFragment.TAG);
                } else {

                    ft.show(fragment_maps);
                }
            }
        }

        @Override
        public void onTabUnselected(Tab tab, FragmentTransaction ft) {

            if (tab.getPosition() == 0) {
                if (fragment_details != null) {
                    ft.hide(fragment_details);
                }
            } else {
                if (fragment_maps != null) {
                    ft.hide(fragment_maps);
                }
            }
        }

        @Override
        public void onTabReselected(Tab tab, FragmentTransaction ft) {
            // TODO Auto-generated method stub

        }

    }
} 

最佳答案

在您的 MapFragment 中创建一个构造函数,获取该 fragment 所需的值,然后使用该信息填充该 fragment 。

public MyMapFragment(long id,String name,int position){
    this.id = id;
    this.name = name;
    this.position = position
}

您需要为 fragment 设置回调以将信息填充到 map fragment 中

如果您需要将数据发送到 Activity ,则在 Intent 中包含该数据 intent.put("some_int",1);

关于Android 跨应用传递数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14285241/

相关文章:

web - 在Dart中如何实现持久性?

java - 如何在 Java 中序列化 AttributedString?

javascript - 在 Sharepoint 2013 中以编程方式编辑和以编程方式保存已编辑的 Wiki 页面

java - 如何解决布局中更多数字的 Editext 问题并从中获取值?

安卓工作室 3.0 : Unable to delete file

BlackBerry 持久对象/存储细微差别问题

javascript - 针对轻量级、可移植的基于 JS 的 Web 应用程序存储持久数据的最佳方式的建议

android - 如何在安卓上使用QFile?

android - 背景图像在android布局中不重复

android - 无法使用 Intents 在 Android Lollipop 5.0 中进行视频通话