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

Java Android将可点击文本设置为从一个片段转到另一个片段,java,android,android-fragments,spannablestring,Java,Android,Android Fragments,Spannablestring,我需要这样做。假设我有两个片段A和B。在片段A中有一个文本可以单击,当用户单击此文本时,他可以转到片段B。示例帮助我完成了此操作,但我认为它对片段不起作用。所以请告诉我解决这个问题的方法 public class myClaimsFragment extends Fragment { TextView requestNewClaim; @Override public View onCreateView(LayoutInflater inflater, ViewGrou

我需要这样做。假设我有两个片段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>


您不能通过
Intent
调用Fragment。您需要将当前片段替换为新片段。

您不能通过
Intent
调用片段。您需要将当前片段替换为新片段。

您必须将片段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,那么它是可行的


如果代码有用,请标记我的答案。:)

您必须将片段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,那么它是可行的


如果代码有用,请标记我的答案。:)

通常,您应该在活动的布局XML文件中放置一个
FrameLayout
。此FrameLayout充当片段的占位符。换句话说,片段A可以粘贴在那里,片段B也是如此

好的,假设您在活动的布局文件中添加了一个
FrameLayout
。在其上粘贴片段以及替换片段应由
碎片管理器
完成。因此,您应该在活动类中获取对
片段管理器的引用。为了完成这件事

  • 如果您使用Android支持库,您应该通过
    getSupportFragmentManager()

  • 否则,
    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后退按钮时,该片段将从状态堆栈中删除,并将回滚


通常,您应该在活动的布局XML文件中放置一个
FrameLayout
。此FrameLayout充当片段的占位符。换句话说,片段A可以粘贴在那里,片段B也是如此

好的,假设您在活动的布局文件中添加了一个
FrameLayout
。在其上粘贴片段以及替换片段应由
碎片管理器
完成。因此,您应该在活动类中获取对
片段管理器的引用。为了完成这件事

  • 如果您使用Android支持库,您应该通过
    getSupportFragmentManager()

  • 否则,
    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是一个片段类,那么您可以在textview上使用setOnClickListener。但对于片段更改,您必须将意图更改为片段事务

比如说

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是主活动布局的片段,新视图将在其中被替换。

如果LoginActivity是一个片段类,那么在textview上使用setOnClickListener就可以了。但对于片段更改,您必须将意图更改为片段事务

比如说

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是主活动布局的一部分,新视图将在其中被替换。

您可以使用
textview.setOnClickListener()
来执行您想要执行的操作。我尝试了它。但它不起作用。您可以使用
textview.setOnClickListener()
去做你想做的事。我试过了,但没有成功。你能告诉我,我在哪里犯了其他错误吗?我把这段代码放在onClick()方法中了。但是什么也没有发生。我运行此代码并单击文本,但什么也没发生。@Tangle:-在您的代码中,请在此处找到请求的id,然后单击功能实现,我希望它能有所帮助。您能告诉我,我在哪里犯了任何其他错误吗?我将此代码放在onClick()方法中。但是什么也没有发生。我跑t