android - 动态ListView几个item响应点击

标签 android listview dynamic android-listview

我有一个带有自定义适配器的 ListView,当用户单击列表项时,它会动态更改和扩展内容。当您向下滚动时,我的列表也会填充。

这是我的问题:每当我单击一个列表项(目前我只是更改列表项的高度)时,它都会按预期工作,但是当我向下滚动时,不止一个列表项会受到影响。假设我单击 ID 为 1 的列表项,然后 ID 为 1、7、15 等的列表项响应触摸事件,这也发生在列表填充更多数据之前,所以这不是我的问题所在。

主要 fragment :

     @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ArrayList<EventObject> eo = new ArrayList<EventObject>();
    adapter = new ListAdapterMain(getActivity(), eo);

}
     @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.listfragment, container, false);
    lv = (ListView) rootView.findViewById(R.id.listViewListFragment);
    lv.setOnScrollListener(onScroll);
    lv.setAdapter(adapter);


    AsyncFetch async = new AsyncFetch();
    async.execute();

    lv.setOnItemClickListener(onClickList);

    return rootView;
}

    AdapterView.OnItemClickListener onClickList = new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View v, int pos, long id) {

        Log.i("ID", "id: " + id);
        AbsListView.LayoutParams lvPars = (AbsListView.LayoutParams) v.getLayoutParams();
        lvPars.height = 500;
        v.setLayoutParams(lvPars);
        v.requestLayout();

    }
};

列表适配器:

    public class ListAdapterMain extends ArrayAdapter<EventObject> {
private Context context;
private ArrayList<EventObject> oItems;

public ListAdapterMain(Context context, ArrayList<EventObject> objects) {
    super(context, R.layout.list_item_mainlist, objects);
    this.context = context;
    this.oItems = objects;
}


    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    if(convertView == null){
    convertView = inflater.inflate(
            R.layout.list_item_mainlist, null);

    ViewHolder viewHolder = new ViewHolder();

    viewHolder.artist = (TextView) convertView
            .findViewById(R.id.textViewListItemArtist);
    viewHolder.venue = (TextView) convertView
            .findViewById(R.id.textViewListItemVenue);
    viewHolder.date = (TextView) convertView
            .findViewById(R.id.textViewListItemDate);
    viewHolder.bandPic = (ImageView) convertView.findViewById(R.id.imageViewListItemArtist);
    viewHolder.venuePic = (ImageView) convertView.findViewById(R.id.imageViewListItemVenue);

    convertView.setTag(viewHolder);
}
ViewHolder holder = (ViewHolder) convertView.getTag();

String thisArtist = oItems.get(position).getArtist();
String thisVenue = oItems.get(position).getVenue();
String thisDate = oItems.get(position).getDate();
String thisArtistPic = oItems.get(position).getArtistPic();
String thisVenuePic = oItems.get(position).getVenuePic();

try {
    //Tue, 17 Sep 2013 11:34:01
    Date inputDate = new SimpleDateFormat("EEE, d MMM yyyy H:m:s", Locale.ENGLISH).parse(oItems.get(position).getDate());
    DateFormat outputDate = new SimpleDateFormat("d MMM yyyy", Locale.getDefault());
    thisDate = outputDate.format(inputDate);
} catch (ParseException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

holder.artist.setText(thisArtist);

holder.venue.setText(thisVenue);
holder.date.setText(thisDate);
if(!thisArtistPic.isEmpty())
UrlImageViewHelper.setUrlDrawable(holder.bandPic, thisArtistPic);
if(!thisVenuePic.isEmpty())
    UrlImageViewHelper.setUrlDrawable(holder.venuePic, thisVenuePic);

return convertView;
    }
       static class ViewHolder{
    TextView artist;
    TextView venue;
    TextView date;
    ImageView bandPic;
    ImageView venuePic;

      }
    }

最佳答案

我建议不要在 onItemClick() 中更改 View 的大小,而是在适配器的 getView() 中执行此操作。存储将要更改的 View 的位置,使 ListView 无效并改为在 getView() 方法中执行调整大小。

关于android - 动态ListView几个item响应点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20682230/

相关文章:

android - 键盘完成按钮未显示

android - Swift AES 加密抛出错误,而在 Android 中则不会

Android:SimpleCursorAdapter 用法

java - 如何让 Android 按钮阵列的 onClickListener 正常工作

c++ - 释放成员指针

android - 从服务器下载 Xml。超时不起作用

android - android应用程序如何检测设备中的左右SD卡

android - 将 ListView 项转换为单个位图图像

android - 为什么我的 ListView 滚动不流畅?

c - C语言二维数组的动态内存分配