Android 动态列表查看多个项目对单击的响应

Android 动态列表查看多个项目对单击的响应,android,listview,dynamic,android-listview,Android,Listview,Dynamic,Android Listview,我有一个带有自定义适配器的ListView,当用户单击列表项时,该适配器会动态地更改和扩展内容。向下滚动时,我的列表也会填充 这是我的问题:每当我点击一个列表项(此时我只是更改列表项的高度)时,它会按预期工作,但当我向下滚动时,不止一个列表项会受到影响。假设我单击id为1的列表项,然后id为1、7、15等的列表项响应触摸事件,这也发生在列表填充更多数据之前,所以这不是我的问题所在 主要片段: @Override public void onCreate(Bundle savedInst

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

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

主要片段:

     @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();

    }
};
@覆盖
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
ArrayList eo=新的ArrayList();
适配器=新的ListAdapterMain(getActivity(),eo);
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图根视图=充气机。充气(R.layout.listfragment,container,false);
lv=(ListView)rootView.findViewById(R.id.listViewListFragment);
lv.setOnScrollListener(onScroll);
低压设置适配器(适配器);
AsyncFetch async=新建AsyncFetch();
execute();
lv.setOnItemClickListener(onClickList);
返回rootView;
}
AdapterView.OnItemClickListener onClickList=新建AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父视图、视图v、整数位置、长id){
Log.i(“ID”,“ID:+ID”);
AbsListView.LayoutParams lvPars=(AbsListView.LayoutParams)v.getLayoutParams();
lvPars.height=500;
v、 setLayoutParams(lvPars);
v、 requestLayout();
}
};
ListAdapter:

    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;

      }
    }
公共类ListAdapterMain扩展了ArrayAdapter{
私人语境;
私人ArrayList oItems;
公共ListAdapterMain(上下文、ArrayList对象){
超级(上下文、R.layout.list\u项目\u主列表、对象);
this.context=上下文;
this.oItems=对象;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
LayoutFlater充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
if(convertView==null){
convertView=充气机。充气(
R.layout.list\u item\u mainlist,空);
ViewHolder ViewHolder=新ViewHolder();
viewHolder.artist=(TextView)convertView
.findViewById(R.id.textViewListItemArtister);
viewHolder.venture=(TextView)convertView
.findViewById(R.id.textViewListItemVincement);
viewHolder.date=(TextView)convertView
.findViewById(R.id.textViewListItemDate);
viewHolder.bandPic=(ImageView)convertView.findViewById(R.id.ImageViewListItemArtister);
viewHolder.venuePic=(ImageView)convertView.findViewById(R.id.ImageViewListItemVincement);
convertView.setTag(viewHolder);
}
ViewHolder=(ViewHolder)convertView.getTag();
字符串thisArtist=oItems.get(position.getArtist();
字符串thisVenue=oItems.get(position.getVenue();
字符串thisDate=oItems.get(position.getDate();
字符串thisArtistPic=oItems.get(position.getArtistPic();
字符串thisVenuePic=oItems.get(position.getVenuePic();
试一试{
//2013年9月17日星期二11:34:01
Date inputDate=新的SimpleDateFormat(“EEE,d MMM yyyy H:m:s”,Locale.ENGLISH).parse(oItems.get(position.getDate());
DateFormat outputDate=新的SimpleDateFormat(“d MMM yyyy”,Locale.getDefault());
thisDate=outputDate.format(inputDate);
}捕获(解析异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
holder.artist.setText(该艺术家);
holder.Visite.setText(本场馆);
holder.date.setText(此日期);
如果(!thisArtistPic.isEmpty())
UrlImageViewHelper.setUrlDrawable(holder.bandPic,thisArtistPic);
如果(!thisVenuePic.isEmpty())
UrlImageViewHelper.setUrlDrawable(holder.venuePic,thisVenuePic);
返回视图;
}
静态类视窗夹{
文本视图艺术家;
TextView场馆;
文本查看日期;
ImageView-bandPic;
ImageView-venuePic;
}
}

我建议在适配器的getView()中更改视图的大小,而不是在onItemClick()中更改视图的大小。存储要更改的视图的位置,使ListView无效,并改为在getView()方法中执行resize