1
我有一個ListView
與自定義適配器動態更改和擴展內容,當用戶單擊列表項目。我的列表也會在您向下滾動時填充。動態ListView幾個項目響應點擊
這是我的問題:每當我點擊一個列表項目(此刻我只是更改列表項目的高度),它按預期工作,但當向下滾動時,多個列表項目會受到影響。說我點擊ID爲1的列表項,然後列出ID爲1,7,15等等的項目響應觸摸事件,這也發生在列表填充更多數據之前,這不是我的問題所在。
MainFragment:
@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();
}
};
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;
}
}