0

我有listview20 件物品。在列表视图的每一行中,都有一个Button. 我想根据位置更改按钮文本。

  1. 如果位置是 2 & 3,按钮文本将是“邀请”。
  2. 如果位置是 5 和 8,按钮文本将为“已发送”。
  3. 对于所有其他职位,按钮文本应为“邀请”。

奇怪的问题是当我滚动时,文本被交换了。

按照我到目前为止的尝试,

public class MyAdapter extends BaseAdapter {

    private Activity activity;
    private String[] data;
    private static LayoutInflater inflater=null;
    public ImageLoader imageLoader; 

    public MyAdapter(Activity a, String[] d) {
        activity = a;
        data=d;
        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        imageLoader=new ImageLoader(activity.getApplicationContext());
    }

    public int getCount() {
        return data.length;
    }

    public Object getItem(int position) {
        return position;
    }

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

    public View getView(int position, View convertView, ViewGroup parent) {
        View vi=convertView;
        if(convertView==null)
            vi = inflater.inflate(R.layout.item, null);

        Button text=(Button)vi.findViewById(R.id.text);;
        ImageView image=(ImageView)vi.findViewById(R.id.image);
        Log.i("POSITION:", ""+position);
        if(position==2 || position==3)
        text.setText("Invited");
        if(position==5 || position==8)
        {
            text.setText("Sent");
        }

        imageLoader.DisplayImage(data[position], image);
        return vi;
    }
}
4

3 回答 3

0

将逻辑更改为:

if (position==2 || position==3) {
    text.setText("Invited");
} 
else if (position==5 || position==8) {
    text.setText("Sent");
}
else {
    text.setText("Invite");
}

由于视图回收,如果没有后备“else”,您将在错误的行中获得错误的文本。

于 2013-07-01T08:44:17.767 回答
0

 else
    {
        text.setText("Invite");
    }

if(position==5 || position==8)
于 2013-07-01T08:44:54.853 回答
0
 public View getViewByPosition(int pos, ListView listView) {
    final int firstListItemPosition = listView.getFirstVisiblePosition();
    final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1;

    if (pos < firstListItemPosition || pos > lastListItemPosition ) {
        return listView.getAdapter().getView(pos, null, listView);
    } else {
        final int childIndex = pos - firstListItemPosition;
        return listView.getChildAt(childIndex);
    }
}
        //check above function return the view and now call the function  

               View v = getViewByPosition(position, list);
                LinearLayout vwParentRow1 = (LinearLayout) v;
                TextView btnChild1 = (TextView) vwParentRow1.getChildAt(0);
                String firstcolumn = btnChild1.getText().toString();

//firstcolumn 变量根据列表视图的位置存储第一列的值

于 2015-10-12T18:55:16.517 回答