【发布时间】:2025-12-30 01:10:07
【问题描述】:
我在CardFragment 中使用了TextView,在GridViewPager 中。 TextView 设置为永远显示。但是当TextView 并没有真正被用户看到时,我希望它停止滚动。
<TextView
android:id"@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true"/>
为了让TextView 真正开始滚动,我调用setSelected(true),但是当我在片段的onPause() 方法中调用setSelected(false) 时,没有任何反应,文本继续滚动。我知道 onPause() 正在被调用,当我在 TextView 上调用 isSelected() 时,它确实返回 false。
只有当我离开两页以上时,文本才会停止滚动。我相信这是因为片段实际上在不靠近当前页面时被销毁,然后在它重新发挥作用时重新创建。
如何让TextView 停止滚动(而不实际破坏片段)?我也尝试过setMarqueeRepeatLimit(0)(以及再次选择setMarqueeRepeatLimit(-1)),但这也不起作用。
编辑:当前 xml 代码:
<TextView
android:id"@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true"/>
片段代码:
public class MyCardFragment extends CardFragment {
private static final String TAG = MyCardFragment.class.getSimpleName();
private String mText;
private Context mContext;
private TextView mTextView;
public static MyCardFragment create(String text) {
mText = text;
}
@OVerride
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = getActivity().getApplicationContext();
}
@Override
public View onCreateContentView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.card_fragment, container, false);
mTextView = (TextView) view.findViewById(R.id.text);
mTextView.setText(mText);
mTextView.setSelected(true);
return view;
}
@Override
public void onPause() {
super.onPause();
mTextView.setEllipsize(TextUtils.TruncateAt.END);
Log.d(TAG, "text: " + mTextView.getText() + " ellipsize: " + mTextView.getEllipsize());
}
public void onSelected() {
mTextView.setEllipsize(TextUtils.TruncateAt.MARQUEE);
Log.d(TAG, "text: " + mTextView.getText() + " ellipsize: " + mTextView.getEllipsize());
}
}
而我的活动实现GridViewPager.OnPageChangeListener 调用onSelected():
public class MainActivity implements GridViewPager.OnPageChangeListener {
...
@Override
public void onPageSelected(int row, int column) {
MyCardFragment fragment = (MyCardFragment) mPagerAdapter.findExistingFragment(row, column);
fragment.onSelected();
}
}
【问题讨论】:
标签: android android-fragments android-viewpager textview