android - 具有 marquee_forever 属性的 TextView,不要在新元素上水平移动
问题描述
第一个元素列表正确显示了选框效果,但是我稍后在收到来自 Firebase 的通知后添加的元素不会在 TextView 中呈现选框效果。
我的活动.java
public abstract class MyActivity extends AppCompatActivity {
...
protected void onCreate(Bundle savedInstanceState) {
mRecycler = findViewById(R.id.choices_recycler);
mRecycler.setLayoutManager(new LinearLayoutManager(this));
mRecycler.setAdapter(new ChoiceAdapter(this, getChoices()));
}
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
int insertIndex = 0;
choices.add(insertIndex, new Choice('foo1','foo2'));
adapter.notifyItemInserted(insertIndex);//New elements don't marquee automatically
//adapter.notifydatasetchanged();//This works! New marquee elements start moving, but OLD elements stop with this...
}
};
}
新元素按照应有的设计正确插入,但在新元素中唯一不起作用的是选取框的移动。这是 .XML 的一部分:
<TextView
android:id="@+id/item_date"
android:layout_width="0dp"
android:layout_height="19dp"
android:layout_marginStart="4dp"
android:layout_marginLeft="4dp"
android:layout_marginTop="6dp"
android:layout_marginEnd="16dp"
android:layout_marginRight="16dp"
android:ellipsize="marquee"
android:freezesText="true"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/item_separator"
app:layout_constraintTop_toTopOf="parent"
tools:text="Here the marquee text" />
<!-- I've also tried: focusableintouchmode=true and focusable=true -->
我还在 ViewHolder 中使用 TextView.setSelected(),但不处理新元素。
任何帮助将不胜感激!
更新#1 我只是尝试了一件事,那就是如果我将应用程序最小化到后台并重新打开它并将其带到前台,那么选框确实可以工作。此外,如果我拉下顶部通知栏,然后返回我的应用程序,选框就会起作用。
UPDATE#2我已经尝试过了,不幸的是它也没有为我工作,虽然它看起来不错: https ://gist.github.com/LeonardoCardoso/1116723900c815a48496
更新#3我的适配器:
public class ChoiceAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
private final Activity activity;
private List<Choice> choices;
public ChoiceAdapter(Activity activity, List<Choice> choices) {
this.activity = activity;
this.choices = choices;
}
@Override
public int getItemViewType(int position) {
return position;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.recycler_item_choice, parent, false);
return new ViewHolder1(view);
}
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
Log.d("onBindViewHolder", "onBindViewHolder executed");
Choice choice = choices.get(position);
ViewHolder1 viewHolder1 = (ViewHolder1)holder;
viewHolder1.bind(choice);
}
@Override
public int getItemCount() {
return choices.size();
}
public class ViewHolder1 extends RecyclerView.ViewHolder {
private final TextView titleText;
private final TextView dateText;
public ViewHolder1(View itemView) {
super(itemView);
titleText = itemView.findViewById(R.id.item_title);
dateText = itemView.findViewById(R.id.item_date);
dateText.setSelected(true);
}
public void bind(final Choice choice) {
titleText.setText(choice.title);
dateText.setText(choice.date);
}
}
}
UPDATE#4实时示例 - 启动应用程序时插入前四个项目,并且您的拨号正常工作。
收到对 Firebase Clod Messaging 的调用时会添加显示的项目:
1) 启动App时RecyclerView中加载了4个元素,并且它们的marquee有正确的动画
2)稍后我们添加了新元素,但它们不会在 TextView 选取框中呈现动画
3)如果我拉下通知栏或将应用程序发送到后台并返回,所有选框都神秘地工作
解决方案
推荐阅读
- statistics - 无法理解 aov_car 包中观察到的和协变量之间的区别
- mp3 - 我无法从云转换器 m4a 下载到 mp3 错误任务导入 1:文件名无效
- javascript - 如何使用 Jquery 在 Ajax 数据响应中循环遍历数组?
- python - 将自定义包添加到使用 pyinstaller 创建的 dist
- r - 将列表列表转换为R中的特定长度
- python - 我的按钮不会将表单保存到数据库中。请帮忙
- javascript - 将 MySQL 与电子应用程序捆绑在一起的任何方式
- netlogo - 有没有办法根据网络徽标中的补丁变量设置补丁集?
- swift - Swift Playground 无法识别其他文件夹中的结构
- javascript - 单击时更改按钮值和颜色