在活动中重用片段类

时间:2015-04-14 20:38:37

标签: java android maps fragment

由于我不熟悉Fragments,我对stackoverflow上提供的解决方案感到非常困惑。我已经尝试了许多不同的技术来完成这个任务:我有一个名为MapFragment的类,它扩展了Fragment。它在我的viewpager中工作正常。但是,我想从不同的活动中重用此类。下面是我的片段中的一个名为MapFragment的样本:

public class MapFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_mapview, container, false);
        mapView = (MapView) rootView.findViewById(R.id.fragment_mapView);
        mapView.onCreate(savedInstanceState);

        this.setHasOptionsMenu(true);

        activity.getActionBar().setDisplayHomeAsUpEnabled(true);

        initGPS();
        initViews();
        initListeners();

        Bundle extras = getArguments();

        String url = "";
        if(extras.containsKey("url"))
            url = extras.getString("url");

        new LoadMarkers().execute(url);

        return rootView;
    }
}

假设我还有其他活动可以用来重复使用上面的mapfragment:

public class MapActivity extends GeneralActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // I want to be able to display the MapFragment inside this activity
        // What Should I Do Here????
        enter code here
    }
}

然后我可以从我的程序中的任何地方调用MapActivity上的intent,知道它将在其中显示MapFragment。这有可能实现吗?

2 个答案:

答案 0 :(得分:1)

为您的活动类MapActivity创建布局。说activity_map.xml

粗略摘要

<RelativeLayout  xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/frag_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            >

在您的活动课程中,

public class MapActivity extends GeneralActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // I want to be able to display the MapFragment inside this activity
        // What Should I Do Here????
        // enter code here
        setContentView(R.layout.activity_map);

        Fragment fragment = new MapFragment();
        FragmentManager manager = getSupportFragmentManager(); 

        manager.beginTransaction()
                .replace(R.id.frag_container, fragment)
                .commit();

    }
}

此外,在您的片段代码中,您期待一个包。确保检查此捆绑包是否为空。由于使用上面的代码,我们没有传递任何数据(setArguments)。

希望这有帮助!

答案 1 :(得分:1)

如果您的活动扩展了ActionBarActivity,那么:

setContentView(R.layout.some_layout);
if(savedInstanceState == null) {
    getSupportFragmentManager().beginTransaction().add(containerViewId, new MapFragment(), "MapFragment").commit();
}

如果不是:

setContentView(R.layout.some_layout);
if(savedInstanceState == null) {
   getFragmentManager().beginTransaction().add(containerViewId, new MapFragment(), "MapFragment").commit();
}

其中containerViewId是您要放置片段的活动(some_layout)中布局的ID。