java - Android Listview可点击textview

标签 java android listview textview

我制作了一个用 list_row_layout.xml 填充的 ListView (用 json 可序列化类填充),我有可点击的 TextView 和 onclick 将文本从“接受”更改为“已接受”。但是当我在第一个 ListView 项目上单击它时,下面的另一个 TextView ListView 项目正在发生变化。 这里有一些照片可以更好地描述您

before clicking the accept textview

After clicking the fist accept textview

这是适配器类

   public class CustomListAdapter extends BaseAdapter {

    private ArrayList<FeedItem> listData;

    private LayoutInflater layoutInflater;

    private Context mContext;

    public CustomListAdapter(Context context, ArrayList<FeedItem> listData) {
            this.listData = listData;
            layoutInflater = LayoutInflater.from(context);
            mContext = context;
    }

    @Override
    public int getCount() {
            return listData.size();
    }

    @Override
    public Object getItem(int position) {
            return listData.get(position);
    }

    @Override
    public long getItemId(int position) {
            return position;
    }


    public View getView(int position, View convertView, ViewGroup parent) {
            final ViewHolder holder;
            if (convertView == null) {
                     convertView = layoutInflater.inflate(R.layout.list_row_layout, null);

                    holder = new ViewHolder();
                    holder.headlineView = (TextView)convertView.findViewById(R.id.sex);
                    holder.reportedDateView = (TextView) convertView.findViewById(R.id.confid);
                    holder.approve = (TextView) convertView.findViewById(R.id.approveTV);



                     holder.approve.setOnClickListener(new OnClickListener()
                    {
                        @Override

                 public void onClick(View argView)
                  {
                holder.approve.setText("Accepted");
               }
                    }
                );

                    convertView.setTag(holder);
            } else {
                    holder = (ViewHolder) convertView.getTag();
            }

            FeedItem newsItem = (FeedItem) listData.get(position);
            holder.headlineView.setText(Html.fromHtml(newsItem.getTitle()));
            holder.reportedDateView.setText(Html.fromHtml(newsItem.getContent()));




            return convertView;
    }



    static class ViewHolder {
           TextView approve;
            TextView headlineView;
            TextView reportedDateView;
            ImageView imageView;

    }
   }

最佳答案

记住 View 可以通过convertView回收。

在 onClick 方法中,您将批准文本设置为“已接受”,但当 View 被回收时,您永远不会将其设置回“接受”

实际上,您需要更新列表(其中的某些内容)以响应单击,并根据该值切换“接受/已接受”值,而不是简单地更新屏幕上当前可见的内容。

-- 回答“如何”问题(下面提出)--

向 ViewHolder 添加新字段

static class ViewHolder {
        TextView approve;
        TextView headlineView;
        TextView reportedDateView;
        ImageView imageView;
        FeedItem newsItem;
}

更改 onClick 方法:

           public void onClick(View argView)
           {
              // note that holder no longer needs to be final in the parent class
              // because it is not used here.
              View parent = (View)argView.getParent();
              ViewHolder clickedHolder = (ViewHolder)parent.getTag();
              clickedHolder .newsItem.setAccepted(true);    /// a new method
              clickedHolder .approve.setText ("Accepted");
              Log.d(TAG, "Accepted item #" + position);
           }

创建convertView之后(如果需要)

        FeedItem newsItem = (FeedItem) listData.get(position);
        holder.newsItem = newsItem; // populate the new field.
        holder.headlineView.setText(Html.fromHtml(newsItem.getTitle()));
        holder.reportedDateView.setText(Html.fromHtml(newsItem.getContent()));
        if(newsItem.isAccepted ()){  // another new method!
           holder.approve.setText ("Accepted");
           Log.d(TAG, "Set text to Accepted for item #" + position);
        }else{
           holder.approve.setText("Accept");
           Log.d(TAG, "Set text to Accept for item #" + position);
        } 

一旦开始工作,您应该考虑删除 Log.d() 行以减少 LogCat 中的噪音。

关于java - Android Listview可点击textview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20337018/

相关文章:

java - 我可以将 IntelliJ 设置为自动缩进代码主体吗?

java - 为什么我的 TimerTask 会出现此错误?

android - Android map 实用程序上的四叉树

java - 如何在android后台服务中监听蓝牙套接字?

java - 在哪里使用方法 onItemSelected

java - 从我的桌面读取文件并打印其中的每一行

java - Hibernate Inheritance.TABLE_PER_CLASS 策略

android - listView动态添加item

android - 我在特定时间安排本地通知,使用开关但它不会在设定时间触发

C# 在拖放时在 ListView 中实现自动滚动