2013-02-28 48 views
0

我正在使用List.get(position)獲取ListView的位置。 但是,這將返回當前滾動範圍頂部的位置。 我的ListView有50個項目,但一次只能看到10個項目。 所以,當你完全向下滾動並調用List.get(position)時,你會得到10的列表項目而不是50.如果你點擊ListView的確切中間的項目,你會得到5而不是25等。Android:從實際頂端獲取ListView的位置

如何從實際頂部的ListView頂部獲得ListView的位置。至少是最簡單的方法。

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
View view = null; 

if (convertView == null) { 
    LayoutInflater inflator = context.getLayoutInflater();  
    view = inflator.inflate(R.layout.addtowatchlist, null); 
    final ViewHolder viewHolder = new ViewHolder(); 
    viewHolder.text = (TextView) view.findViewById(R.id.label);  
    viewHolder.addbutton = (Button) view.findViewById(R.id.button); 
    viewHolder.addbutton 
     .setOnClickListener(new Button.OnClickListener() { 
     @Override 
     public void onClick(View buttonview) { 
      //I need the correct ACTUAL position here, not the VISABLE position     
      Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(list.get(position).getUrl())); 
      context.startActivity(browserIntent);    
      list.get(position).getUrl();     
      Model element = (Model) viewHolder.addbutton 
         .getTag(); 
        element.setSelected(true); 
     } 
     }); 
    view.setTag(viewHolder); 
    viewHolder.addbutton.setTag(list.get(position)); 
} else { 
    view = convertView; 
    ((ViewHolder) view.getTag()).addbutton.setTag(list.get(position)); 
} 
ViewHolder holder = (ViewHolder) view.getTag(); 
holder.text.setText(list.get(position).getName());  
return view; 

}

編輯:我認爲這是與調用onClickListener用錯viewHolder,但我不能完全看着辦吧......

+0

可能重複(http://stackoverflow.com/questions/2001760/android-listview-get-data-index-of-visible-item) – 2013-02-28 13:26:42

+0

@GrahamBorland這個問題是尋找第一個可見的位置,而不是重複。 – Geobits 2013-02-28 13:51:44

+0

是的,我的職位目前給出了第一個可見的項目,但這正是我不想要的。 – 2013-02-28 13:54:33

回答

0

我固定它自己很多痛苦的嘗試之後。這是一個缺乏瞭解如何優化的ListView工作,什麼convertView參數做...

我移動onClickListenerif (convertView == null)外塊,放在getView返回其觀點的權利之前。通過這種方式,所採取的位置不是可回收的可見位置,而是從頂部開始的ACTUAL位置。

@Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
    View view = null; 
    final AiringModel am = list.get(position);  
    am.setRealPosition(position, list.get(position).getUrl());  
    LayoutInflater inflator = context.getLayoutInflater();  
    view = inflator.inflate(R.layout.addtowatchlist, null); 
    final ViewHolder viewHolder = new ViewHolder(); 
    viewHolder.text = (TextView) view.findViewById(R.id.label); 
    if (convertView == null) { 
     view.setTag(viewHolder);  
    } else { 
     view = convertView; 
     ((ViewHolder)view.getTag()).addbutton.setTag(list.get(position));  
    } 
    ViewHolder holder = (ViewHolder) view.getTag(); 
    holder.text.setText(list.get(position).getName());  
    viewHolder.addbutton = (Button) view.findViewById(R.id.check);  
    viewHolder.addbutton.setTag((Integer)position);  
    viewHolder.addbutton 
    .setOnClickListener(new Button.OnClickListener() { 
     @Override 
     public void onClick(View buttonview) { 
      // TODO Auto-generated method stub     
      int realPosition = am.getRealPosition(); 
      String realName = am.getRealName(); 
      Log.d("Pair created!", "Clicked button with position: "+ realPosition + " For item name: " + realName); 
      Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(list.get(realPosition).getUrl())); 
      context.startActivity(browserIntent);   
     } 
    }); 
    return view; 
    } 
[Android的ListView控件:獲得可見項數據指標】的