2013-12-19 24 views
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; 

     } 
    } 

回答

2

而不是改變鑑於onItemClick大小(),我建議這樣做,在getView()的適配器。保存將被更改的視圖的位置,使ListView失效,然後在getView()方法中執行調整大小。