Java Android Listview可点击文本视图冲突

Java Android Listview可点击文本视图冲突,java,android,listview,android-listview,Java,Android,Listview,Android Listview,我制作了一个用list_row_layout.xml填充的Listview(它由json可序列化类填充),我制作了可点击的textview,并单击将文本从“接受”更改为“接受”。但当我在第一个listview项目上单击它时,下面的另一个textview listview项目正在更改。这里有一些照片可以更好地描述你 活动课 feedListView.setAdapter(new CustomListAdapter(this, feedList)); 适配器类 public

我制作了一个用list_row_layout.xml填充的Listview(它由json可序列化类填充),我制作了可点击的textview,并单击将文本从“接受”更改为“接受”。但当我在第一个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;
}
}
公共类CustomListAdapter扩展了BaseAdapter
{
私有数组列表数据;
私人停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场;
私有上下文;
公共CustomListAdapter(上下文上下文,ArrayList listData)
{
this.listData=listData;
layoutInflater=layoutInflater.from(上下文);
mContext=上下文;
}
@凌驾
public int getCount()
{
返回listData.size();
}
@凌驾
公共对象getItem(int位置)
{
返回listData.get(位置);
}
@凌驾
公共长getItemId(int位置)
{
返回位置;
}
公共视图getView(int位置、视图转换视图、视图组父视图)
{
最终持票人;
if(convertView==null)
{
convertView=LayoutFlater.充气(R.layout.list\u row\u layout,null);
holder=新的ViewHolder();
holder.headlineView=(TextView)convertView.findViewById(R.id.title);
holder.reportedDateView=(TextView)convertView.findViewById(R.id.confid);
holder.approve=(TextView)convertView.findViewById(R.id.approvev);
holder.approve.setOnClickListener(新的OnClickListener()
{
@凌驾
公共void onClick(视图argView)
{
持有人。批准。设定文本(“接受”);
}
}
);
convertView.setTag(支架);
}
其他的
{
holder=(ViewHolder)convertView.getTag();
}
FeedItem newsItem=listData.get(位置);
holder.headlineView.setText(Html.fromHtml(newItem.getTitle());
holder.reportedDateView.setText(Html.fromHtml(newItem.getContent());
holder.approve.setTag(新闻项);
返回视图;
}
静态类视窗夹
{
文本视图批准;
文本视图标题视图;
TextView reportedDateView;
图像视图图像视图;
}
}
文本视图代码

            <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" />


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

您必须为每行设置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
请尝试以下代码:-

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

谢谢

listview由来自web的json数组填充,其中一个json数组对象是ID,我在serializable类中有它,你能给我一个例子吗?