I am working with custom Adapter of a ListView in which I have a TextView and a Spinner. After selecting the values from a Spinner, the value after copied to the TextView of
Change
if(convertView == null) {
convertView = mInflater.inflate(R.layout.row, null);
// creates a ViewHolder and stores a reference to the children view we want to bind data to
holder = new AppViewHolder();
holder.spiner=(Spinner)convertView.findViewById(R.id.spinner);
holder.offtext=(TextView)convertView.findViewById(R.id.off_txt);
holder.offTxt = (TextView) convertView.findViewById(R.id.off_txt);
holder.apptitleTxt = (TextView) convertView.findViewById(R.id.apptitle_txt);
Typeface typeface = Typeface.createFromAsset(_activity.getAssets(),"CHICM___.TTF");
holder.apptitleTxt.setTypeface(typeface);
holder.offTxt.setTypeface(typeface);
if(screenWidth>480){
holder.offTxt.setTextSize(30);
holder.apptitleTxt.setTextSize(30);
}
convertView.setTag(holder);
} else {
holder = (AppViewHolder) convertView.getTag();
}
TO
convertView = mInflater.inflate(R.layout.row, null);
// creates a ViewHolder and stores a reference to the children view we want to bind data to
holder = new AppViewHolder();
holder.spiner=(Spinner)convertView.findViewById(R.id.spinner);
holder.offtext=(TextView)convertView.findViewById(R.id.off_txt);
holder.offTxt = (TextView) convertView.findViewById(R.id.off_txt);
holder.apptitleTxt = (TextView) convertView.findViewById(R.id.apptitle_txt);
Typeface typeface = Typeface.createFromAsset(_activity.getAssets(),"CHICM___.TTF");
holder.apptitleTxt.setTypeface(typeface);
holder.offTxt.setTypeface(typeface);
if(screenWidth>480){
holder.offTxt.setTextSize(30);
holder.apptitleTxt.setTextSize(30);
}
convertView.setTag(holder);
Now you can see that every thing will work properly. This is not the best way to fix the problem!, to need to manage the state of you items when using convert view for view recycling.
EDIT
public class AppListAdapter extends BaseAdapter {
private LayoutInflater mInflater;
private List mApps = Constants.list;
private Context _activity;
ArrayList months=null;
ArrayAdapter dataAdapter =null;
int spinerposition;
int viewposition;
int temp=0;
private int screenWidth;
ArrayList vals=null;
/**
* Constructor.
*
* @param context the application context which is needed for the layout inflater
* @param screenWidth
*/
public AppListAdapter(Context context, int screenWidth) {
// Cache the LayoutInflate to avoid asking for a new one each time.
mInflater = LayoutInflater.from(context);
this._activity=context;
this.screenWidth = screenWidth;
months = new ArrayList();
months.add("No Item Selected");
months.add("None");
months.add("Entertainment");
months.add("Games");
months.add("News/Books");
months.add("Social Networking");
months.add("Utilities");
months.add("Texting");
months.add("Web Browsers");
vals = new ArrayList();
// Creating adapter for spinner
dataAdapter = new ArrayAdapter(_activity,
android.R.layout.simple_spinner_item, months);
// Drop down layout style - list view with radio button
dataAdapter.setDropDownViewResource(android.R.layout.select_dialog_singlechoice);
}
public int getCount() {
return mApps.size();
}
public Object getItem(int position) {
return mApps.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(final int position, View convertView, ViewGroup parent) {
final AppViewHolder holder;
viewposition=position;
convertView = mInflater.inflate(R.layout.row, null);
// creates a ViewHolder and stores a reference to the children view we want to bind data to
holder = new AppViewHolder();
holder.spiner=(Spinner)convertView.findViewById(R.id.spinner);
holder.offtext=(TextView)convertView.findViewById(R.id.off_txt);
holder.offTxt = (TextView) convertView.findViewById(R.id.off_txt);
holder.apptitleTxt = (TextView) convertView.findViewById(R.id.apptitle_txt);
Typeface typeface = Typeface.createFromAsset(_activity.getAssets(),"CHICM___.TTF");
holder.apptitleTxt.setTypeface(typeface);
holder.offTxt.setTypeface(typeface);
if(screenWidth>480){
holder.offTxt.setTextSize(30);
holder.apptitleTxt.setTextSize(30);
}
convertView.setTag(holder);
if(vals.get(position)!=null)
{
holder.offtext.setText(vals.get(position));
}
holder.setTitle(mApps.get(position).getTitle(),mApps.get(position).getVersionName());
notifyDataSetChanged();
holder.offTxt.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
holder.spiner.performClick();
}
});
holder.spiner.setAdapter(dataAdapter);
holder.spiner.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView> arg0, View arg1,int arg2, long arg3) {
spinerposition=arg2;
switch (spinerposition)
{
case 1:
holder.offtext.setText("None");
break;
case 2:
holder.offtext.setText("Entertainment");
break;
case 3:
holder.offtext.setText("Games");
break;
case 4:
holder.offtext.setText("News/Books");
break;
case 5:
holder.offtext.setText("Social Networking");
break;
case 6:
holder.offtext.setText("Utilities");
break;
case 7:
holder.offtext.setText("Texting");
break;
case 8:
holder.offtext.setText("Web Browsers");
break;
}
vals.add(arg2,holder.offtext.getText());
}
public void onNothingSelected(AdapterView> arg0) {
}
});
return convertView;
}
/**
* Sets the list of apps to be displayed.
*
* @param list the list of apps to be displayed
*/
public void setListItems(List list) {
mApps = list;
}
/**
* A view holder which is used to re/use views inside a list.
*/
public class AppViewHolder {
private TextView mTitle = null;
private TextView apptitleTxt = null;
private TextView offTxt = null;
private Spinner spiner=null;
public TextView offtext;
/**
* Sets the text to be shown as the app's title
*
* @param title the text to be shown inside the list row
*/
public void setTitle(String title,String category) {
apptitleTxt.setText(title);
// offtext.setText(category);
}
}
}