java - Android - 当我滚动时按钮会改变

标签 java android button listactivity

我正在为历史课编写一个国家/首都抽认卡应用程序。如果我单击按钮,它会变为大写,当我向下滚动然后向上滚动时,它会恢复为大写状态。我怎样才能阻止这种情况发生?这是我的代码:

package com.example.hostoryflashcards;

import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class EastEurope extends ListActivity {
    String capital[] = {
            "Albainia", "Belarus", "Bosina and Herzegouina", "Bulgaria",
            "Croatia", "Czech Republic", "Estonia", "Finland", "Greece",
            "Hungary", "Kosovo", "Latvia", "Lithuania", "Macedonia", "Molova",
            "Montenegro", "Poland", "Romainia", "Russia", "Serbia", "Slovakia",
            "Ukraine", "RELOAD"
    };
    String answer[] = {
            "TIRANA", "MINSKA", "SARAJERO", "SOFIA", "ZAGREB", "PRAUGE",
            "TALLINN", "HELSINKI", "ATHENS", "BUDAPEST", "PRISTINA", "RIGA",
            "VILNIUS", "SKOPJE", "CHISINAU", "PODGORICA", "WARSAW", "BUCHAREST",
            "MOSCOW", "BELGRADE", "BRATISLAVA", "LJUBLJANA", "KIEV"
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        loadActivity();
    }

    private void loadActivity() {
        setListAdapter(new ArrayAdapter<String>(EastEurope.this, android.R.layout.simple_list_item_1, capital));
    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
        TextView ov;
        ov = (TextView) v;

        if (ov.getText().toString() == answer[position]) {
            ov.setText(capital[position]);
        } else {
            ov.setText(answer[position]);
        }
    }
}

最佳答案

您正在更改显示 View ,但未更改基础数据的问题。当适配器需要重新创建 View 时,它会使用未更改的数据。

鉴于此,最好的方法是更改​​数据并告诉适配器进行更新,而不是更改 View 本身。

添加可更改列表并在适配器中使用它:

ArrayList<String> displayed;

// in loadActivity
displayed = new ArrayList<String>(Arrays.asList(capital));
setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, displayed));

然后在单击列表项时更改数据并通知适配器:

// In onListItemClick
if (displayed.get(position).equals(answer[position])) {
    displayed.set(position, capital[position]);
} else {
    displayed.set(position, answer[position]);
}
((ArrayAdapter) getListAdapter()).notifyDataSetChanged();

关于java - Android - 当我滚动时按钮会改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19779409/

相关文章:

java - Java 8 上的 J2EE Mybatis Web 应用程序 - java.lang.RuntimeException : XPathFactory#newInstance

java - 如何使用嵌套的for循环测试方法

android - 如何在加载 Activity 之前隐藏操作栏?

java - 从另一个 Android 应用程序下载并安装 Android 应用程序

android - 非 Lollipop Material 平面按钮

java - 通过java锁定在oracle中登录的用户

java - 每次使用特定参数启动 Java

android - 如何配置 Crashlytics Android Beta 分发流程?

html - 悬停在 1 个元素上时,有没有办法让其他元素消失

Jquery UI 对话框按钮文本不起作用