我使用列表視圖用鼠標適配器排列表視圖,每個列表視圖排了一次用戶點擊其中任何一項,我突出了綠色的顏色,如果正確的選項四個可單擊選項用戶選擇了錯誤的選項然後選擇一種紅色。填充先前選擇的選項,同時重用
現在,當我滾動它突出了一行用綠色和紅色,即使我沒有選擇這些選項的列表視圖。
我知道這個問題是,當列表視圖重用行,然後它正在發生,但如何避免它們,任何機構可以請建議我。下面
參考
public class RoundsListAdapter extends CursorAdapter {
private String mOptionOne = "option_1";
private String mOptionTwo = "option_2";
private String mOptionThree = "option_3";
private String mOptionFour = "option_4";
private LayoutInflater mLayoutInflator;
private Context mContext;
public RoundsListAdapter(Context context, Cursor c, boolean autoQuery,int windowHeight, int windowWidth) {
super(context, c,autoQuery);
mLayoutInflator = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
final View customView = mLayoutInflator.inflate(R.layout.talk_row_list,null);
return customView;
}
@Override
public void bindView(View view, Context context, final Cursor cursor) {
final CustomButtonFlat option_1 = (CustomButtonFlat)view.findViewById(R.id.talks_answerA);
View option_1SepartorView = view.findViewById(R.id.talks_answerA_seprator);
final CustomButtonFlat option_2 = (CustomButtonFlat)view.findViewById(R.id.talks_answerB);
View option_2SepartorView = view.findViewById(R.id.talks_answerB_seprator);
final CustomButtonFlat option_3 = (CustomButtonFlat)view.findViewById(R.id.talks_answerC);
View option_3SepartorView = view.findViewById(R.id.talks_answerC_seprator);
final CustomButtonFlat option_4 = (CustomButtonFlat)view.findViewById(R.id.talks_answerD);
final ImageView talksThankImage = (ImageView)view.findViewById(R.id.talks_thank_image);
final TextView talksNoOfThanks = (TextView)view.findViewById(R.id.talks_no_of_thanks);
String optionA = cursor.getString(cursor.getColumnIndexOrThrow(TalkTable.TALK_OPTION_1));
String optionB = cursor.getString(cursor.getColumnIndexOrThrow(TalkTable.TALK_OPTION_2));
String optionC = cursor.getString(cursor.getColumnIndexOrThrow(TalkTable.TALK_OPTION_3));
String optionD = cursor.getString(cursor.getColumnIndexOrThrow(TalkTable.TALK_OPTION_4));
if(optionA == null || optionA.length()<=0){
option_1.setVisibility(View.GONE);
option_1SepartorView.setVisibility(View.GONE);
}else{
option_1.setVisibility(View.VISIBLE);
option_1SepartorView.setVisibility(View.VISIBLE);
option_1.setText(cursor.getString(cursor.getColumnIndexOrThrow(TalkTable.TALK_OPTION_1)));
}
if(optionB == null || optionB.length()<=0){
option_2.setVisibility(View.GONE);
option_2SepartorView.setVisibility(View.GONE);
}else{
option_2.setVisibility(View.VISIBLE);
option_2SepartorView.setVisibility(View.VISIBLE);
option_2.setText(cursor.getString(cursor.getColumnIndexOrThrow(TalkTable.TALK_OPTION_1)));
}
if(optionC == null || optionC.length()<=0){
option_3.setVisibility(View.GONE);
option_3SepartorView.setVisibility(View.GONE);
}else{
option_3.setVisibility(View.VISIBLE);
option_3SepartorView.setVisibility(View.VISIBLE);
option_3.setText(cursor.getString(cursor.getColumnIndexOrThrow(TalkTable.TALK_OPTION_1)));
}
if(optionD == null || optionD.length()<=0){
option_4.setVisibility(View.GONE);
}else{
option_4.setVisibility(View.VISIBLE);
option_4.setText(cursor.getString(cursor.getColumnIndexOrThrow(TalkTable.TALK_OPTION_1)));
}
// only set these listeners if MCQ in the talks are available
final String mcqAnswer = cursor.getString(cursor.getColumnIndexOrThrow(TalkTable.TALK_ANSWER));
Log.d(TAG," Talk mcq answer is = " + mcqAnswer);
option_1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mcqAnswer.equalsIgnoreCase(mOptionOne)){
option_1.setBackgroundResource(R.color.correctMCQAnswer);
}else if(mcqAnswer.equalsIgnoreCase(mOptionTwo)){
option_1.setBackgroundColor(Color.RED); // settings wrong color
option_2.setBackgroundResource(R.color.correctMCQAnswer);
// setting correct color for correct answer
Log.d(TAG, " Setting button color answer 2");
}else if(mcqAnswer.equalsIgnoreCase(mOptionThree)){
option_1.setBackgroundColor(Color.RED); // settings wrong color
option_3.setBackgroundResource(R.color.correctMCQAnswer);
Log.d(TAG, " Setting button color answer 3");
}else if(mcqAnswer.equalsIgnoreCase(mOptionFour)){
option_1.setBackgroundColor(Color.RED); // settings wrong color
option_4.setBackgroundResource(R.color.correctMCQAnswer);
Log.d(TAG, " Setting button color answer 4");
}
}
});
option_2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mcqAnswer.equalsIgnoreCase(mOptionOne)) {
option_2.setBackgroundColor(Color.RED);
option_1.setBackgroundResource(R.color.correctMCQAnswer);
} else if (mcqAnswer.equalsIgnoreCase(mOptionTwo)) {
option_2.setBackgroundResource(R.color.correctMCQAnswer);
} else if (mcqAnswer.equalsIgnoreCase(mOptionThree)) {
option_2.setBackgroundColor(Color.RED); // settings wrong color
option_3.setBackgroundResource(R.color.correctMCQAnswer);
} else if (mcqAnswer.equalsIgnoreCase(mOptionFour)) {
option_2.setBackgroundColor(Color.RED); // settings wrong color
option_4.setBackgroundResource(R.color.correctMCQAnswer);
}
}
});
option_3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mcqAnswer.equalsIgnoreCase(mOptionOne)) {
option_3.setBackgroundColor(Color.RED);
option_1.setBackgroundResource(R.color.correctMCQAnswer);
} else if (mcqAnswer.equalsIgnoreCase(mOptionTwo)) {
option_3.setBackgroundColor(Color.RED); // settings wrong color
option_2.setBackgroundResource(R.color.correctMCQAnswer);
} else if (mcqAnswer.equalsIgnoreCase(mOptionThree)) {
option_3.setBackgroundResource(R.color.correctMCQAnswer);
} else if (mcqAnswer.equalsIgnoreCase(mOptionFour)) {
option_3.setBackgroundColor(Color.RED); // settings wrong color
option_4.setBackgroundResource(R.color.correctMCQAnswer);
}
}
});
option_4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mcqAnswer.equalsIgnoreCase(mOptionOne)) {
//mQuestion_1.setBackgroundColor(Color.GREEN); // setting correct color
option_4.setBackgroundColor(Color.RED);
option_1.setBackgroundResource(R.color.correctMCQAnswer);
} else if (mcqAnswer.equalsIgnoreCase(mOptionTwo)) {
option_4.setBackgroundColor(Color.RED); // settings wrong color
option_2.setBackgroundResource(R.color.correctMCQAnswer);
} else if (mcqAnswer.equalsIgnoreCase(mOptionThree)) {
option_4.setBackgroundColor(Color.RED); // settings wrong color
option_3.setBackgroundResource(R.color.correctMCQAnswer);
} else if (mcqAnswer.equalsIgnoreCase(mOptionFour)) {
option_4.setBackgroundResource(R.color.correctMCQAnswer);
}
}
});
}
}
您必須在每次使用前初始化您的視圖。否則,您會將視圖置於以前的使用狀態。在'bindView'中,您應該:清除所有元素的背景,如果用戶已經選擇了答案(爲了保留用戶選擇),請設置背景。 – MyDogTom
請你可以幫我通過代碼,你是建議很好的東西。 – Naga
我添加了一個示例代碼。看一看。 – MyDogTom