在我的应用中,我有一个Spinner
,可以填充两个Array
Strings
个values/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}}
这就是我希望它的样子:
答案 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;
}
}