簡體   English   中英

從活動中調用片段(來自OnClickListener)

[英]Call a Fragment from an Activity (from OnClickListener)

我的活動中有一個按鈕,當我單擊該按鈕時,我想調用一個片段。

例如,如果我想調用一個活動,我可以使用意圖,但如果我想調用一個片段,我該怎么做?

我檢查了其他問題,但未找到所要解答的答案。

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

        }
    });

我要放在里面什么呢?

您可以動態添加片段。要創建片段。

要以編程方式添加或刪除Fragment,您將需要FragmentManagerFragmentTransaction

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>

爪哇

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 ();

    }
});

看到這個文件

您無法打開新片段。 片段需要始終由活動托管。 如果該片段處於同一活動中(例如選項卡),則返回鍵導航將非常棘手,我假設您要使用該片段打開一個新屏幕。 因此,您只需創建一個新活動並將新片段放在其中。 然后,該活動將通過活動類顯式地或通過意圖過濾器隱式地對意圖做出反應。

您的問題的答案很容易:用新的Fragment替換當前的Fragment並將事務推送到Backstack。 這樣可以保留后退按鈕的行為...

創建一個新的Activity確實打敗了使用碎片的整個目的……非常適得其反。

@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

報價單

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM