在按钮单击侦听器的卡片视图中逐字突出显示字符串文本
Highlight text of String word by word inside card view on button click listener
单击 CardView
中的按钮时,我必须突出显示特定单词。我需要在其中突出显示单词的文本也是 CardView
的一部分。
问题是,当我单击按钮时,其他 CardViews
中的文本也被突出显示。
是什么原因造成的,我该如何解决这个问题?
这是我的代码:
@Override
public void onBindViewHolder(final DuaViewHolder duaViewHolder,final int i) {
ci = allDuasLists.get(i);
duaViewHolder.arebicText.setText(ci.getDuas());
duaViewHolder.arebicEuivalantText.setText(ci.getArebicText());
duaViewHolder.nativeText.setText(ci.getNativeText());
mp = new MediaPlayer();
duaViewHolder.playAudio.setBackgroundResource(R.drawable.play_48);
class MyTimer extends CountDownTimer {
public MyTimer(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
WordtoSpan = new SpannableString(CurrentDua);
}
@Override
public void onFinish() {
k=0;
this.cancel();
Toast.makeText(context, "Timer finished", Toast.LENGTH_LONG).show();
}
@Override
public void onTick(long millisUntilFinished) {
WordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), arrString[k], arrString[k + 1], Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
k++;
duaViewHolder.arebicText.setText(WordtoSpan);
}
}
duaViewHolder.playAudio.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
ci = allDuasLists.get(i);
CurrentDua = ci.getDuas();
Log.e("Current Dua", CurrentDua);
arrString = new int[CurrentDua.length() + 1];
MakeSubString();
duaViewHolder.playAudio.setBackgroundResource(R.drawable.stop_48);
MyTimer timer = new MyTimer(mp.getDuration() * 1000, 1300);
timer.start();
k = 0;
}
});
}
这是它的样子:
尝试这种方式,而不是从列表
的 onclicklistener 中获取 ci 的值
ci = allDuasLists.get(i);
将ci设置为duaViewHolder.playAudio标签
duaViewHolder.playAudio.setTag(ci);
并在 onClickListener 中得到它
ci = /*(Cast to your ci class)*/ v.getTag();
单击 CardView
中的按钮时,我必须突出显示特定单词。我需要在其中突出显示单词的文本也是 CardView
的一部分。
问题是,当我单击按钮时,其他 CardViews
中的文本也被突出显示。
是什么原因造成的,我该如何解决这个问题?
这是我的代码:
@Override
public void onBindViewHolder(final DuaViewHolder duaViewHolder,final int i) {
ci = allDuasLists.get(i);
duaViewHolder.arebicText.setText(ci.getDuas());
duaViewHolder.arebicEuivalantText.setText(ci.getArebicText());
duaViewHolder.nativeText.setText(ci.getNativeText());
mp = new MediaPlayer();
duaViewHolder.playAudio.setBackgroundResource(R.drawable.play_48);
class MyTimer extends CountDownTimer {
public MyTimer(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
WordtoSpan = new SpannableString(CurrentDua);
}
@Override
public void onFinish() {
k=0;
this.cancel();
Toast.makeText(context, "Timer finished", Toast.LENGTH_LONG).show();
}
@Override
public void onTick(long millisUntilFinished) {
WordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), arrString[k], arrString[k + 1], Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
k++;
duaViewHolder.arebicText.setText(WordtoSpan);
}
}
duaViewHolder.playAudio.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
ci = allDuasLists.get(i);
CurrentDua = ci.getDuas();
Log.e("Current Dua", CurrentDua);
arrString = new int[CurrentDua.length() + 1];
MakeSubString();
duaViewHolder.playAudio.setBackgroundResource(R.drawable.stop_48);
MyTimer timer = new MyTimer(mp.getDuration() * 1000, 1300);
timer.start();
k = 0;
}
});
}
这是它的样子:
尝试这种方式,而不是从列表
的 onclicklistener 中获取 ci 的值ci = allDuasLists.get(i);
将ci设置为duaViewHolder.playAudio标签
duaViewHolder.playAudio.setTag(ci);
并在 onClickListener 中得到它
ci = /*(Cast to your ci class)*/ v.getTag();