Reputation: 25
no error was found but the results are displayed on the value of the spinner is not complete. I take the value of the spinner from string-array in xml, this example :
<string-array name="digit">
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
<item>6</item>
<item>7</item>
<item>8</item>
<item>9</item>
<item>10</item>
<item>11</item>
<item>12</item>
<item>13</item>
<item>14</item>
<item>15</item>
<item>16</item>
<item>17</item>
<item>18</item>
<item>19</item>
</string-array>
and the results I get :
1
2
3
4
5
6
7
8
9
10
11
12
13
1
2
3
4
5
6
why the results that appear to restore the initial value ? please help to check for errors, this example script :
public class CustomAdapterSpinner extends BaseAdapter {
private Context ctx;
private LayoutInflater layoutInflater;
private List<String> data;
public CustomAdapterSpinner(Context context, List<String> data) {
this.ctx = context;
this.data = data;
layoutInflater = (LayoutInflater) ctx
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return data.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
view = layoutInflater.inflate(R.layout.spinner_rows, parent, false);
TextView textView = (TextView) view.findViewById(R.id.text1);
ImageView imageView = (ImageView) view.findViewById(R.id.image1);
imageView.getLayoutParams().height = 55;
imageView.getLayoutParams().width = 55;
imageView.setPadding(0, 10, 0, 10);
textView.setText(data.get(position));
textView.setPadding(10, 10, 0, 10);
textView.setTypeface(null, Typeface.BOLD);
textView.setTextSize(18);
imageView.setImageResource(R.drawable.digit;
return view;
}
and this I put in myfragment
List<String> listStrings = Arrays.asList(getResources().getStringArray(R.array.digit));
CustomAdapterSpinner adapter = new CustomAdapterSpinner (getActivity(), listStrings);
spinner.setAdapter(adapter);
please help and many thanks
Upvotes: 0
Views: 446
Reputation: 1705
Make use of view holder.
Create a static class as
static class ViewHolder
{
TextView textView;
ImageView imageView;
}
Add this class inside adapter class, so it must be a inner class.
Then change your getView() method as follows.
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (converView== null) {
converView= layoutInflater.inflate(R.layout.spinner_rows, bull);
viewHolder=new ViewHolder();
viewHolder.textView = (TextView) view.findViewById(R.id.text1);
viewHolder.imageView = (ImageView) view.findViewById(R.id.image1);
viewHolder.imageView.getLayoutParams().height = 55;
viewHolder.imageView.getLayoutParams().width = 55;
viewHolder.imageView.setPadding(0, 10, 0, 10);
viewHolder.textView.setPadding(10, 10, 0, 10);
viewHolder.textView.setTypeface(null, Typeface.BOLD);
viewHolder.textView.setTextSize(18);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.textView.setText(data.get(position));
imageView.setImageResource(R.drawable.digit;
return convertView;
}
This is completely untested code.
Hope this helps.
Upvotes: 1