簡體   English   中英

Android將可點擊的文本設置為將一個片段移到另一個片段

[英]Android set clickable text to go one fragment to another fragment

我需要做這樣的事情。 假設我有兩個片段A和B。片段A中有一個可以單擊的文本,當用戶單擊該文本時,他可以轉到片段B。 示例幫助我完成了操作,但我認為它不適用於片段。 因此,請告訴我解決該問題的方法。

public class myClaimsFragment extends Fragment {

   TextView requestNewClaim;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View newClaimRequest = inflater.inflate(R.layout.activity_my_claims, container, false);


        SpannableString ss = new SpannableString("Request");
        ClickableSpan clickableSpan = new ClickableSpan() {
            @Override
            public void onClick(View textView) {
                Intent intent = new Intent(getActivity(),LoginActivity.class);
                startActivity(intent);
            }
        };
        ss.setSpan(clickableSpan , 0,ss.length() , Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        requestNewClaim =(TextView) newClaimRequest.findViewById(R.id.requestHere);
        requestNewClaim.setText(ss.toString());
        requestNewClaim.setMovementMethod(LinkMovementMethod.getInstance());

        return newClaimRequest;
    }

}

布局XML

        <LinearLayout
            android:id="@+id/view2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:orientation="vertical">



            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/requestHere"
                android:clickable="true"
                android:textSize="20dp"
                android:textStyle="bold"
                android:textColor="#000000"
                android:layout_marginLeft="20dp"
                android:layout_alignParentRight="true"
                android:layout_alignParentEnd="true"/>

        </LinearLayout>

如果LoginActivity是片段類,那么如果在textview上使用setOnClickListener那就可以了。 但是對於片段更改,您必須將Intent更改為fragmentTransaction,

使用類似

textview.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                    getFragmentManager().beginTransaction().replace(R.id.container, new LoginActivity() ).addToBackStack("").commit();
});

但是,如果您想使用SpannableString,請這樣做,

ClickableSpan clickableSpan = new ClickableSpan() {
        @Override
        public void onClick(View textView) {
            getFragmentManager().beginTransaction().replace(R.id.container, new LoginActivity() ).addToBackStack("").commit();
        }
    };

在此,R.id.container是您的主活動布局的片段,其中新視圖將被替換。

您不能通過Intent調用Fragment。 您需要用新片段替換當前片段。

您必須將片段A替換為B,使用此代碼

FragmentManager fm = getActivity.getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
Fragment fragment = new FragmentB();
ft.replace(R.id.activity_main_content_fragment,fragment);
ft.commit();

在此代碼中,替換R.id.youframelayoutid,然后使其可行

如果其代碼有用,請標記我的答案。 :)

通常,應將FrameLayout放在Activity的布局XML文件中。 此FrameLayout充當片段的占位符。 換句話說,片段A可以粘貼到那里,片段B也可以粘貼到那里。

好的,假設您已在活動的布局文件中添加了FrameLayout 在其上粘貼片段並替換片段應該由FragmentManager完成。 因此,您應該在活動類中獲取對FragmentManger的引用。 為了做到這一點...

  • 如果您使用Android支持庫,則應該通過getSupportFragmentManager()獲得對FragmentManger的引用

  • 否則, getFragmentManager()

在Android中,添加片段以及替換片段都是以事務的形式完成的。 因此,您應該通知片段管理器您要進行交易。 這可以通過以下方式完成:

FragmentTransaction transaction = fragmentManger.beginTransaction();

現在,您可以將所有所需的內容應用於此事務對象。 例如,添加片段可以像這樣完成:

transaction.add(R.id.placeholder, new FragmentA() , "tag-frag-A");

用於更換...

transaction.replace(R.id.placeholder, new FragmentB(), "tag-frag-B");

完成后,您可以通過調用來提交該事務

transaction.commit();

筆記:

  • FragmentManager就像您添加的片段的容器一樣。 您可以按添加的片段的標簽搜索。

  • 設備旋轉不會刪除FragmentManager中添加的片段。 因此,在您的onCreate方法中,請注意您只添加了一次所有片段。

  • 您可以將事務添加到后堆棧。 這意味着,每當用戶單擊Android后退按鈕時,此片段就會從狀態堆棧中刪除,並且也會回滾。

暫無
暫無

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

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