微调框与文本和图标

时间:2011-04-21 12:24:32

标签: android text icons spinner

在我的应用中,我有一个Spinner,可以填充两个Array Stringsvalues/strings.xml,存储在我的drawable资源中。根据两个RadioButton的状态,选择正确数组的值并填充我的Spinner。

对于每个字符串数组,我有一个具有相同大小的图标数组。我的所有图标都以“A”开头,后跟一个数字。我无法改变它,它存储在数据库中。我在Strings.xml中有一个数组,其中包含绘制图标所需的所有数字。所有实际图标都可以在// Arrays with each function in text arbeiderjobs = getResources().getStringArray(R.array.arbeiders); bediendejobs = getResources().getStringArray(R.array.bediende); // Arrays with each function ID arbeiderjobsid = getResources().getIntArray(R.array.arbeidersid); bediendejobsid = getResources().getIntArray(R.array.bediendeid); 资源文件夹中找到。

现在我想在Spinner选择的列表中显示字符串旁边的相应项目。当项目被选中时,我只需要查看文本。

我已经在互联网上搜索了一个很好的教程,但是我发现我没有成功地做到这一点。我刚开始使用Android编程,所以我觉得我需要一些帮助。我希望有人能引导我朝着正确的方向前进。

我将String Array放在实际的数组中,例如:

// RadioButton 'Arbeider': If a value gets chosen in this list, 
// the corresponding ID is put in the below variable 
RadioButton rbArbeider = (RadioButton) findViewById(R.id.rbArbeider);
rbArbeider.setOnCheckedChangeListener(new OnCheckedChangeListener() 
{
  public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
  {
    if (isChecked)
    {
      showSpinner(arbeiderjobs, R.id.cmbFuncties);
      s.setOnItemSelectedListener(new OnItemSelectedListener() 
      {
        public void onItemSelected(AdapterView<?> parentView, 
                                   View selectedItemView, int position, long id)
        {
          functie = arbeiderjobsid[position];
          statuut = 1;
          visible = false;  
        }
      });

      visible = true;
    }
  } // s.setOnItemSelectedListener

}); // rbArbeider.setOnCheckedChangeListener

当选择其中一个RadioButtons时,我使用以下事件处理程序代码:

showSpinner

这是我的private void showSpinner(String [] jobs, int id) { MyCustomAdapter adapter = new MyCustomAdapter ( FindJob.this, R.layout.spinnerrow, jobs ); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); for (int i = 0; i < jobs.length; i++) { adapter.add(jobs[i]); } Spinner s = (Spinner) findViewById(id); s.setClickable(true); s.setAdapter(adapter); } 方法:

public class MyCustomAdapter extends ArrayAdapter<String>
{

  public MyCustomAdapter(Context context, int textViewResourceId, 
                         String[] objects) 
  {
    super(context, textViewResourceId, objects);
  }

  @Override
  public View getDropDownView(int position, View convertView, ViewGroup parent) 
  {
    return getCustomView(position, convertView, parent, 
                         arbeiderjobs, arbeiderjobsid);
  }

  @Override
  public View getView(int position, View convertView, ViewGroup parent) 
  {
    return getCustomView(position, convertView, parent, 
                         arbeiderjobs, arbeiderjobsid);
  }

  public View getCustomView(int position, View convertView, ViewGroup parent,                                                         
                            String jobs[], int jobsid[]) 
  {
    // return super.getView(position, convertView, parent);

    LayoutInflater inflater = getLayoutInflater();
    View row = inflater.inflate(R.layout.spinnerrow, parent, false);
    TextView label = (TextView) findViewById(R.id.functie);
    label.setText(jobs[position]);

    ImageView icon = (ImageView) row.findViewById(R.id.icon);

    String uri = "@drawable/a" + jobsid[position];
    int imageResource = getResources().getIdentifier
    (  
      uri, 
      null, 
      getPackageName()
    );
    icon.setImageResource(imageResource);

    if (visible)
    {
      icon.setVisibility(View.GONE);
    }

    return row;
  }

}

我已根据this tutorial制作了自定义适配器,但我有点纠结......我需要一些帮助:

{{1}}

这就是我希望它的样子:

Result

1 个答案:

答案 0 :(得分:4)

您需要实现自定义适配器并为列表项定义自定义布局。 Check this tutorial

<强>更新

尝试以下方法。我没有测试过代码,但我认为它应该像那样工作。

public class MyCustomAdapter extends ArrayAdapter<String>{

    private String[] mIcons;

    public MyCustomAdapter(Context context, int textViewResourceId,
    String[] objects, String[] icons) {
        super(context, textViewResourceId, objects);
        mIcons = icons;
    }

    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        return getCustomView(position, convertView, parent);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        return getCustomView(position, convertView, parent);
    }

    public View getCustomView(int position, View convertView, ViewGroup parent) {

       LayoutInflater inflater=getLayoutInflater();
       View row=inflater.inflate(R.layout.spinnerrow, parent, false);
       TextView label=(TextView) findViewById(R.id.functie);
       label.setText(getItem(position);

       ImageView icon=(ImageView)row.findViewById(R.id.icon);

       String uri = "@drawable/a" + mIcons[position];
       int imageResource = getResources().getIdentifier(uri, null, getPackageName());
       icon.setImageResource(imageResource);

       return row;
    }
}