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 布局的片段,新视图将在其中被替换。
我需要做这样的事情。假设我有 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 布局的片段,新视图将在其中被替换。