Android 将可点击文本设置为从一个片段转到另一个片段

Android set clickable text to go one fragment to another fragment

我需要做这样的事情。假设我有 2 个片段 A,B.There 是一个可以在片段 A 中点击的文本,当用户点击这个文本时,他可以转到片段 B。This 示例帮助我做到了,但我认为它不适用于片段。所以请告诉我解决这个问题的方法。

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>

您不能通过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 就像您的 Fragment 的占位符。换句话说,Fragment A可以粘贴到那里,Fragment B也可以。

好的,假设您在 activity 的布局文件中添加了 FrameLayout。粘贴片段和替换片段应该由 FragmentManager 完成。因此,您应该在 activity class 中获取对 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 后退按钮时,此片段将从状态堆栈中删除并回滚。

如果 LoginActivity 是一个片段 class 那么如果您在 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 是主 activity 布局的片段,新视图将在其中被替换。