【问题标题】:Android Listview clickable textview conflictAndroid Listview可点击textview冲突
【发布时间】:2013-12-03 12:42:56
【问题描述】:

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

活动类

     feedListView.setAdapter(new CustomListAdapter(this, feedList));

适配器类

    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.title);
        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 = listData.get(position);

    holder.headlineView.setText(Html.fromHtml(newsItem.getTitle()));
    holder.reportedDateView.setText(Html.fromHtml(newsItem.getContent()));

    holder.approve.setTag(newsItem);



    return convertView;
}

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

文本视图代码

            <TextView
            android:id="@id/approveTV"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_marginRight="5dp"
            android:background="@drawable/pressed"
            android:gravity="fill"
            android:text="Accept"
            android:clickable="true"
            android:textColor="#0D98BA"
            android:textSize="17sp" />

【问题讨论】:

    标签: java android listview android-listview


    【解决方案1】:

    您必须编写一些跟踪位置功能,以记住您已更改的位置并确保仅更改位置的文本。

    【讨论】:

      【解决方案2】:

      您必须为每一行设置 id,并将其保存在一个数组中,如整数,当您单击一行时,您必须更改该行的值,并且在更改文本或任何内容时,您必须检查该行的值,如果0 则设置默认值,如果1 那么您想要什么:我的想法是创建int[],其长度就是您列表的大小,

      首先你必须像下面这样定义你的 int[] 并将每个索引设置为零。

          int[] selected = new int[listData.getsize()]
      

      getview 中的类似内容:

          holder.approve.setId(Html.fromHtml(newsItem.getId());
      

      getView 中的else 语句之后:

        if (selected[position] == 0)
        {
           // set default
        }
        else
        {
         // any changing that you want 
        }
      

      在 onClick 中:

          selected[holder.approve.getId()] = 1;
          // any change that you want
      

      【讨论】:

      • listview 填充了来自 web 的 json 数组,其中一个 json 数组对象是 ID,我在可序列化类中有它,你能给我一个例子吗?
      【解决方案3】:

      试试下面的代码:-

      public View getView(final int position, View convertView, ViewGroup parent)
      {
          final ViewHolder holder;
          if (convertView == null)
          {
              holder = new ViewHolder();
              convertView = layoutInflater.inflate(R.layout.list_row_layout, null);
      
              holder.headlineView = (TextView)convertView.findViewById(R.id.title);
              holder.reportedDateView = (TextView) convertView.findViewById(R.id.confid);
              holder.approve = (TextView) convertView.findViewById(R.id.approveTV);
      
      
              convertView.setTag(holder);
          }
          else
          {
              holder = (ViewHolder) convertView.getTag();
          }
      
          FeedItem newsItem = listData.get(position);
      
          holder.headlineView.setText(Html.fromHtml(newsItem.getTitle()));
          holder.reportedDateView.setText(Html.fromHtml(newsItem.getContent()));
      
      
      
          holder.approve.setOnClickListener(new OnClickListener()
                  {
                      @Override
                      public void onClick(View argView)
                      {
                          holder.approve.setText("accepted");
                      }
                  }
              );
      
      
      
          return convertView;
      }
      

      谢谢!!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-04
        • 2016-07-18
        • 1970-01-01
        • 2021-07-21
        • 2015-05-09
        相关资源
        最近更新 更多