2013-11-28 115 views
1

我有問題listview。我有我的主要活動叫SecondActivity.java其中我只有按鈕kierunkiButton。創建這個按鈕,新的活動點擊後,KierunkiActivity.java你可以看到如下:Listview顯示兩次所有行

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

          } 
     }); 

新的活動,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時,都會添加列表視圖(在我的KierunkiActivity中)行。


我的意思:我第一次點擊kierunkibutton我有2行(正確的)。當我回到以前的活動,並再次點擊kierunkibutton我有這些舊的2行和2行額外(當然是相同的)。而第三次我有六個,繼續前進。 我認爲我應該檢查這個listview是否在點擊kierunkibutton後每次都被填充,或者從這個listview中刪除所有行。但我不知道該怎麼做。

enter image description here

你有任何想法如何做到這一點? 在此先感謝!

+0

你必須先清除你的數組列表,然後再次點擊它。 –

+0

嘿請發佈您的KierunkiActivity的完整代碼,所以我們可以幫助您 –

回答

3

只需從代碼頂部刪除new ArrayList<String>();並將其置於openAndQueryDatabase方法中即可。

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

你有什麼我的問題 –

+0

所以我應該期待 –

+0

@PoojaDubey,我會說不要..因爲工作量,我不能專注於你問題親愛的..如果你有時間等待,我會幫助,但我在非常緊張的時間表。:( –

0

使用CursorLoaderLoaderManager.LoaderCallbacks<Cursor>來管理您的數據遊標(如從數據庫結果)。

這樣你就不會掛起主線程。

1

您必須在每次單擊按鈕時刷新ArrayList。否則,它會使用現有項目加載新項目。

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

在將數據加載到列表之前,只需添加clear()語句即可。

或實例你列出你的openAndQueryDatabase內像這樣的()方法,

private void openAndQueryDatabase() { 
    results = new ArrayList<String>(); 
    // Rest of your code 
} 

試試這個,我希望這可以幫助你。謝謝。

0

您有一個成員變量result,每次調用openAndQueryDatabase時都會追加結果。這意味着您每次都要添加到現有的項目列表中,因此您將獲得重複項目。

讓openAndQueryDatabase返回結果集合然後您可以將它傳遞給displayResultList可能會更好。

1

您的適配器的數據源是變量「結果」您已定義爲靜態:

static ArrayList<String> results = new ArrayList<String>(); 

刪除static關鍵字和你的問題就會迎刃而解。靜態變量在應用程序的整個生命週期中保持不變。所以當你離開活動並且實例被銷燬時,靜態變量仍然存在。當你回到活動並再次創建它時,靜態變量就像以前一樣,並且正在添加到以前的內容。刪除static關鍵字,每次創建活動時都會重新創建變量。

0

感謝您的回答!

我所做的是爲@Chintan Rathod說:

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

,一切完美的作品。非常感謝!

+0

你應該接受回答我的朋友,而不是在這裏發佈相同..你可以接受只需勾選「真」就在下面的特定答案:) –

+0

這就是我做@Chintan。一個「嘀嗒」是從我:) – k4sia