2011-02-15 107 views
0

嘿。我有一個android spinner項目,其中的行由TextView和ImageView(一個星標,標記用戶已將該特定項目標記爲最愛)組成。現在,當用戶喜歡某個項目時,我想讓星形顯示在微調列表中的該項目旁邊,因此我想重新繪製微調以顯示更新的圖像。我該怎麼做呢?重繪android spinner

我現在正在做的是,我正在用適當的圖像創建一個全新的微調器。這使得我的微調器將所選項目設置爲列表中的第一項,這很煩人 - 我希望它保持不變。我曾嘗試

spinner.setSelection(selectedItem); 

這工作比我實際需要的數目(當前選擇的項目的位置)以外的任何號碼,然後再次將選擇微調項目列表中的第一個。

所以:我怎樣才能重新繪製列表與更新的信息,而不必重新創建整個列表,或者,我怎樣才能重新創建列表,仍然保留微調項目選擇?

澄清:這是我在做什麼

// Callback for "favourite"-button 
star.setOnClickListener(new ImageButton.OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 
      // Toggle favourite 
      getActiveSelection().setStarred(getActiveSelection().isStarred() ? false : true); 
      reloadText(); 
      createSpinner(); 
     } 
    }); 

private void createSpinner() { 

    spinner = ((Spinner)findViewById(R.id.spinner)); 

    ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>(); 
    HashMap<String, Object> map = new HashMap<String, Object>(); 

    // Populate spinner item list 
    for(int i=0; i<N; i++) { 
     SpinnerItem item = getSpinnerItem(i); 
     map = new HashMap<String, Object>(); 
     map.put("Name", item.getName()); 
     map.put("Icon", (item.isStarred() ? "On" : "Off")); 
     list.add(map); 
    }   

    MySpinnerAdapter aspn = new MySpinnerAdapter(this, list, 
      R.layout.spinner, new String[] { "Name", "Icon" }, 
      new int[] { R.id.spinnerrow, R.id.spinnerrowicon }); 


    spinner.setAdapter(aspn); 
    spinner.setSelection(getActiveSelection().getSpinnerPosition()); 
} 

回答

2

你可能只是更新微調適配器 - 讓它知道哪個項目已出演時,用戶點擊了星標(star.setOnClickListener ...)。我會做什麼:

  1. 在適配器結構,你只傳遞「名稱」字段,不需要的圖標(所有默認情況下不出演)
  2. 您添加單獨的函數適配器設置加星標的項目的列表( setStarred(字符串名稱))
  3. 在初始呼叫,則啓動setStarred設置初始選擇(如果有的話)star.setOnClickListener實施
  4. 上,您獲得的(MySpinnerAdapter)spinner.getAdapter適配器調用setStarred已加星標的項目( )
+0

優秀。這樣做,謝謝。 – user573536 2011-02-15 22:36:46

1

或者只是嘗試:

spinner.setSelection(getActiveSelection().getSpinnerPosition(),true); 

這爲我工作,以更新飛旋......

0

您需要在您的數據已經改叫notifyDataSetChanged()的微調適配器上。