gpt4 book ai didi

android - ListView 行中的 TextView 在 Android 滚动时显示重复值?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:17:12 31 4
gpt4 key购买 nike

我正在使用 ListView 的自定义适配器,其中有一个 TextView 和一个 Spinner。从微调器中选择值后,将值复制到相应列表的同一行的 TextView 中。

问题是,由于我在 ListView 中有超过 40 个元素,当我选择第一个微调器并将值设置为相应的 TextView 时,在滚动时,在第 10 行 TextView 中看到相同的值。

滚动时,值从第 1 个 TextView 复制到第 10 个 TextView。

下面是我使用的代码:

public class AppListAdapter extends BaseAdapter {

private LayoutInflater mInflater;
private List<App> mApps = Constants.list;
private Context _activity;
ArrayList<String> months=null;
ArrayAdapter<String> dataAdapter =null;
int spinerposition;
int viewposition;

int temp=0;
private int screenWidth;


/**
* 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<String>();
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");


// Creating adapter for spinner
dataAdapter = new ArrayAdapter<String>(_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;
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();
}

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;
}
}
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<App> 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);
}
}

}

最佳答案

这是因为 ListView 正在重用所有以前的滚动(不可见)的 Views

请查看this主题。

关于android - ListView 行中的 TextView 在 Android 滚动时显示重复值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17142117/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com