我需要做这样的事情。假设我有两个片段A和B.有一个文本可以在片段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>
答案 0 :(得分:2)
如果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是主要活动布局的片段,其中将替换新视图。
答案 1 :(得分:1)
您无法通过Intent
调用Fragment。您需要用新的片段替换当前片段。
答案 2 :(得分:1)
您必须将片段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,然后它可行
如果它的代码有用,那么请标记我的答案。 :)
答案 3 :(得分:1)
通常,您应该在Activity的布局XML文件中放置FrameLayout
。此FrameLayout就像Fragments的占位符一样。换句话说,片段A可以粘贴在那里,片段B也是如此。
好的,假设您在活动的布局文件中添加了FrameLayout
。在其上粘贴片段以及替换片段应该由FragmentManager
完成。因此,您应该在活动类中获取对FragmentManger
的引用。为了完成这件事......
如果您使用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后退按钮时,该片段将从状态堆栈中删除,并且也将被回滚。