2011-02-15 76 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()的微调适配器上。