从活动中打开片段

时间:2016-04-12 20:15:03

标签: android android-fragments

我正在开发一个小型Google地图应用,让用户可以找到靠近它们的地方,我想添加一些功能,让用户可以将地点添加到收藏夹列表中,到目前为止,我已经创建了可以执行此功能的类。

我的主要活动是我的主页,其中打开了其他活动,代码如下:

 import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageButton;

public class MainActivity extends AppCompatActivity {

    ImageButton btnNearBy;
    ImageButton btnFavourites;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnNearBy = (ImageButton) findViewById(R.id.btnNearby);
        btnNearBy.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent mapIntent = new Intent(getBaseContext(), MapsActivity.class);
                startActivity(mapIntent);
            }
        });

        btnFavourites = (ImageButton) findViewById(R.id.btnFavourites);
        btnFavourites.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                FragmentManager fragmentManager = MainActivity.this.getFragmentManager();
                FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
                FavouriteListFragment fragment = new FavouriteListFragment();
                fragmentTransaction.add(R.id.fragment_container, fragment); //ERROR ON THIS LINE
                fragmentTransaction.commit();
            }
        });

    }
}

我已经创建了一个按钮,可以打开包含收藏列表的片段,我的片段声明如下: public class FavouriteListFragment extends Fragment { ... }

我有点不确定如何在单击按钮时从MainActivity打开片段。 有任何想法吗? 谢谢!

2 个答案:

答案 0 :(得分:3)

由于您使用的是android.support.v4.app.Fragment,因此在导入正确的版本时存在很多混淆。试试这样:

android.support.v4.app.FragmentManager fragmentManager = MainActivity.this.getSupportFragmentManager();
android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

FavouriteListFragment fragment = new FavouriteListFragment();

fragmentTransaction.add(R.id.fragment_container, fragment);
fragmentTransaction.commit();

fragment_container FrameLayout activity_main内的<FrameLayout android:id="@+id/fragment_container" android:layout_width="match_parent" android:layout_height="match_parent"> </FrameLayout>

 table( count.fields("C:/Users/username/Desktop/data.csv", 
                            comment.char="", quote="", sep="," ))

Reference

答案 1 :(得分:3)

有两种显示片段的方式:

1-首先,您需要在代码中定义一个片段容器,如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

     <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="do something" 
        android:onClick="openFragment" />
     <FrameLayout
         android:id="@+id/fragment_container"
         android:layout_height="wrap_content"
         android:layout_width="match_content" />
</LinearLayout>

然后您需要在活动中创建一个名为openFragment的函数,并在openFragment中使用以下代码:

getSupportFragmentManager().beginTransaction().add(R.id_fragment_container,new FavouriteListFragment()).commit();

2-您可以在活动xml文件中定义片段,如:

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/my_fragment"
    android:name="com.example.android.something.FavouriteListFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.android.something.FavouriteListFragment"
    tools:layout="@android:layout/fragment_layout" />

第一个称为动态片段创建,第二个称为静态。第一个你有更多的自由,但如果你的片段在整个活动中没有变化,那么使用第二个片段就更简单了