Android 中列表视图行中的 TextView 在滚动时显示重复值?

2023-11-21

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

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

值在滚动时从第一个 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 topic.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 中列表视图行中的 TextView 在滚动时显示重复值? 的相关文章

  • 使用 APDU 命令的有效 NFC 读取比特率是多少?

    我目前正在使用 Android IsoDep trancieve 函数发送和接收累计 1628 字节的数据 该函数分布在 35 个 APDU 命令 选择应用程序 身份验证 读取 中 字节计数包括返回的 MAC 校验和以及由 transcie
  • 如何将 EditText 传递给另一个活动?

    Intent intent new Intent this Name class intent putExtra key et getText toString startActivity intent Intent intent getI
  • SQLite (Android):使用 ORDER BY 更新查询

    Android SQLite 我想要在 myTable 中的其他行之间插入行在android中使用SQLite 为此 我尝试增加从第 3 行开始的所有行的 id 这样 我就可以在位置 3 处插入新行 myTable 的主键是列 id 表中没
  • React Native Android 发布 apk 是调试,而不是发布

    我有一个现有的 Android 应用程序 我已根据以下内容将 React Native v0 30 活动添加到项目中docs http facebook github io react native releases next docs i
  • 如何在 Android 上创建 YouTube 的双击手势?

    我在 Android 上有 exoplayer 的应用程序 我已经创建了 youtube双击手势用动画向前或向后跳跃 10 秒 如何在双击时创建具有波纹效果的半圆 像这样 这个怎么做 我也想实现这样的功能 所以我自己编写了它来 复制 You
  • 使用 Android 播放任意音调

    有没有办法让Android发出任意频率的声音 意思是 我不想预先录制声音文件 我环顾四周 音调发生器 http developer android com reference android media ToneGenerator html
  • Android中不同线程的数据库访问

    我有一个在 AsyncTasks 中从互联网下载数据的服务 它解析数据并将其存储在数据库中 该服务持续运行 当服务写入数据库时 活动会尝试从数据库中读取更改 我有一个数据库助手 有多种写入和读取方法 这会导致问题吗 可能尝试从两个不同的线程
  • 从多个选项卡中的编辑文本字段获取文本

    我正在尝试创建一个使用选项卡作为输入表单的 Android 应用程序 基本上 我希望对其进行设置 以便用户可以在一个选项卡上输入一些信息 然后提交该信息 或者转到另一个选项卡并输入更多信息 然后从两个选项卡提交信息 我正在使用操作栏和片段来
  • 在 AppAuth-Android 中注销

    我有一个用JAVA开发的Android应用程序 对于这个应用程序 我使用的是身份服务器4 https github com IdentityServer IdentityServer4作为我的 STS 一切正常 但我找不到任何注销的实现Ap
  • jar 中的 apklib 有什么优点?

    我正在关注这个问题 https stackoverflow com questions 6059502 whats the difference between apklib and jar files但它并没有完全回答我的问题 jar 中
  • 从手机访问本地主机[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在使用
  • ACCESS_BACKGROUND_LOCATION 不适用于低于 Q (29) 的 Android 版本

    我的应用程序面向 Android API 28 根据文档 https developer android com preview privacy location target android 10 我应该要求ACCESS BACKGROU
  • 删除Android所有语言中的字符串

    我有一个包含多个翻译的应用程序 我想删除一些字符串 我怎样才能重构并删除它们一次 例如在默认情况下strings xml文件并自动将删除传播到其他翻译的其他 strings xml 文件 您可以通过 Android Studio 中的 翻译
  • Android:打开和关闭SQLite数据库

    我正在开发Android应用程序 我经常在其中访问本地数据库 该数据库可以从不同的主题访问 因此我遇到了数据库的协调问题 我使用以下open and close method public void open mDb mDbHelper g
  • 如何获取android手机型号、版本、sdk详细信息?

    如何获取android手机型号 版本 sdk详细信息 首先 看看 android sdk 页面上的这些 Build 类 http developer android com reference android os Build html h
  • Android - iphone 风格 tabhost [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Android 中的 Google Places API - 适用于个人用户的 API_KEY

    我已经浏览了与在 Android 应用程序中使用 Places API 相关的 Android 文档和其他博客 到处都建议使用 API KEY 来调用 REST 服务 API KEY 在整个项目 应用程序中都是相同的 每天的请求数限制为 1
  • 通过powershell运行ADB命令

    所以我尝试通过 powershell 脚本运行一些 ADB 命令 这是我正在尝试做的一个简单示例 adb shell echo in adb shell su root echo you are now root ls cd data da
  • 如何以编程方式创建活动转换?

    我想以编程方式创建一个动画 以从触摸屏点启动具有缩放效果的活动 接下来我模拟缩放输入效果
  • putFragment() - 片段 x 当前不在 FragmentManager 中

    上面的标题被问了很多次 但答案似乎与FragmentStatePagerAdapter这与我的问题无关 我正在使用该方法putFragment Bundle String Fragment 直接地 The 安卓文档 http develop

随机推荐