java - ListView 显示两次所有行

标签 java android listview android-listview

我对 listview 有疑问。我的主要 Activity 名为 SecondActivity.java,其中我只有 按钮,例如 kierunkiButton。单击此按钮后,将创建新 Activity KierunkiActivity.java,如下所示:

 kierunkiButton.setOnClickListener(new OnClickListener() {
            public void onClick(View arg0) {
                Intent intent = new Intent();
             intent.setClass(SecondActivity.this, KierunkiActivity.class);
             startActivity(intent);

                            }
       });

新 Activity KierunkiActivity 是一个 ListActivity,如下所示:

public class KierunkiActivity extends ListActivity {

    SharedPreferences preferences;
    SQLiteDatabase sqliteData;
    static String kier;
    static ArrayList<String> results = new ArrayList<String>();

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.lista_activity2);
        preferences = PreferenceManager.getDefaultSharedPreferences(this);
        openAndQueryDatabase();
        displayResultList();
    }

    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
        //Object o = this.getListAdapter().getItem(position);
        Object selectedItem = l.getItemAtPosition(position);
        kier = selectedItem.toString();

        if (position == 0) {
            Intent intent = new Intent();
            intent.setClass(KierunkiActivity.this, MatematykaActivity.class);
            startActivity(intent);
        } else if (position == 1) {
            Intent intent = new Intent();
            intent.setClass(KierunkiActivity.this, MatematykaActivity.class);
            startActivity(intent);
        }
    }

    private void openAndQueryDatabase() {
        try {
            DBHelper dbHelper = new DBHelper(this.getApplicationContext());
            sqliteData = dbHelper.getReadableDatabase();

            Cursor c = sqliteData.rawQuery(
                    "select Kierunek from Kierunki order by _id", null);
            System.out.println("------cursor: " + c.getCount());

            if (c != null) {
                if (c.moveToFirst()) {
                    do {
                        String kier = c.getString(c.getColumnIndex("Kierunek"));
                        results.add(kier);
                    } while (c.moveToNext());
                }
            }

            System.out.println("---------" + results.size() + "--------------");
        } catch (SQLiteException se) {
            Log.e(getClass().getSimpleName(),
                    "Could not create or Open the database");
        }

    }

    private void displayResultList() {

        setListAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, results));
        getListView().setTextFilterEnabled(true);

    }

我的问题是每次单击 kierunkibutton 时都会向 ListView (在我的 KierunkiActivity 中)添加行。


我的意思是:第一次单击 kierunkibutton 时,我有 2 行(正确)。当我返回到之前的 Activity 并再次单击 kierunkibutton 时,我有这些旧的 2 行和另外 2 行(当然相同)。第三次之后,我有六个,然后继续下去。 我认为每次单击 kierunkibutton 或从此 ListView 中删除所有行后,我都应该检查是否填充了此 ListView 。但我不知道该怎么做。

enter image description here

你知道怎么做吗? 提前致谢!

最佳答案

只需删除 new ArrayList<String>();从代码顶部并将其放在 openAndQueryDatabase 中方法。

private void openAndQueryDatabase() {
   results = new ArrayList<String>();
}

关于java - ListView 显示两次所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20264447/

相关文章:

java - 如何在Eclipse上的自己的插件中嵌入http服务器?

android - 按钮和正常/选定/按下状态之间的动画转换

listview - ExtJS:如何用列将文本包装在ListView中?

android - UML 类图 Android

c# - ListView 控件中的 ASP.NET 更新面板未更新

ios - native 脚本 ListView 。获取第一个可见项 iOS 的位置

java - 如何在 Java 中从 Excel 中的列名中读取值

java - 使用 Java eclipse kura GPIO 闪烁 LED 的简单代码?

java - 是否有必要从 getter 方法返回一个与 Hibernate 传递给 setter 的对象不同的对象?

php - 没有从 MySQL 检索到 Android ListView 的数据