2016-08-07 8 views
0

アクティビティ内にボタンがあります。このボタンをクリックすると、フラグメントを呼び出したいと思います。アクティビティからフラグメントを呼び出す(OnClickListenerから)

たとえば、アクティビティを呼び出す場合は、そのインテントを使用できますが、フラグメントを呼び出す場合はどうしたらいいですか?

私は他の質問をチェックしましたが、私が求めていることに対する答えは見つかりませんでした。

btnHome.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

     } 
    }); 

私はこれに何を入れますか?

答えて

1

フラグメントを動的に追加できます。フラグメントを作成することができます。

プログラム的フラグメントを追加または削除するには、XMLレイアウト

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

<FrameLayout 
    android:id="@+id/myFrame" <!-- Id which you're gonna use in Java --> 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 

<Button 
    android:id="@+id/button1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Click me" /> 

</LinearLayout> 

FragmentManagerFragmentTransaction

を必要とするJava

btnHome.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 

    FragmentManager fragmentManager = getFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

    MyFragment myfragment = new MyFragment(); //your fragment 

// work here to add, remove, etc 
    fragmentTransaction.add (R.id.myFrame, myfragment); 
    fragmentTransaction.commit(); 

    } 
}); 

See this doc

+0

私は置くつもりですか? – marte

+0

あなたは、アクティビティレイアウト内にフレームレイアウトまたはidを持つ他のレイアウトを作成してから、そのIDをJavaで使用してください。 –

+1

この@marteを参照http://wptrafficanalyzer.in/blog/dynamically-add-fragments-to-an -activity-in-android/ –

1

新しいフラグメントを開くことはできません。フラグメントは常にアクティビティによってホストされる必要があります。フラグメントが同じアクティビティ(タブなど)にある場合、バックキーのナビゲーションは難しくなります。そのフラグメントで新しいスクリーンを開きたいと仮定しています。 新しいアクティビティを作成してそこに新しいフラグメントを配置するだけです。そのアクティビティは、アクティビティクラスを介して明示的に、またはインテントフィルタを介して暗黙的にインテントに反応します。

あなたの問題に対する答えは簡単です:現在のフラグメントを新しいフラグメントで置き換え、バックスラックにプッシュするトランザクション。これにより、ボタンの動作を元に戻すことができます。

新しいアクティビティを作成すると、目的を完全に破り、とにかくフラグメントを使用できます...非常に生産的です。 R.id.myFrameで

@Override 
public void onClick(View v) { 
    // Create new fragment and transaction 
    Fragment newFragment = new chartsFragment(); 
    // consider using Java coding conventions (upper first char class names!!!) 
    FragmentTransaction transaction = getFragmentManager().beginTransaction(); 

    // Replace whatever is in the fragment_container view with this fragment, 
    // and add the transaction to the back stack 
    transaction.replace(R.id.fragment_container, newFragment); 
    transaction.addToBackStack(null); 

    // Commit the transaction 
    transaction.commit(); 
} 

https://developer.android.com/guide/components/fragments.html#Transactions

引用

関連する問題