2011-07-28 6 views
3

要素ごとに1つのwebviewを持つカスタムリストビューを作成しました。私のカスタムリストビュー要素のポジションオーダーの問題

私の問題は、私が要素をクリックすると、悪い要素 - positonがかかるということです。

はここ

public class ListViewCustomAdapter extends BaseAdapter { 
public ArrayList<String> mywebview; 
public Activity context; 
public LayoutInflater inflater; 

public ListViewCustomAdapter(Activity context, ArrayList<String> mywebview) { 
    //super(); 
    this.mywebview = new ArrayList<String>(); 
    this.context = context; 
    this.mywebview = mywebview; 
    this.inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 

@Override 
public int getCount() { 
    return mywebview.size(); 
} 

@Override 
public String getItem(int position) { 
    return mywebview.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

public static class ViewHolder { 
    WebView mywebviewholder; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder; 
    if (convertView == null) { 
     holder = new ViewHolder(); 
     convertView = inflater.inflate(R.layout.mylistview2, null, false); 
     holder.mywebviewholder = (WebView) convertView 
       .findViewById(R.id.weblistview); 

     holder.mywebviewholder 
       .setOnTouchListener(new my.student.application.WebViewClickListener(
         holder.mywebviewholder, parent, position)); 
     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 
    holder.mywebviewholder.loadDataWithBaseURL("", mywebview.get(position) 
      .toString(), "text/html", "UTF-8", ""); 
    return convertView; 
} 

私のWebViewクリックリスナーあなたの助け

編集用

public class WebViewClickListener implements View.OnTouchListener { 
private int position; 
private ViewGroup vg; 
private WebView wv; 

public WebViewClickListener(WebView wv, ViewGroup vg, int position) { 
    this.vg = vg; 
    this.position = position; 
    this.wv = wv; 
} 

public boolean onTouch(View v, MotionEvent event) { 
    int action = event.getAction(); 
    switch (action) { 
    case MotionEvent.ACTION_CANCEL: 
     return true; 
    case MotionEvent.ACTION_UP: 
     sendClick(); 
     return true; 
    } 
    return false; 
} 

public void sendClick() { 
    ListView lv = (ListView) vg; 
    lv.performItemClick(wv, position, 0); 
} 

おかげで私のカスタムリストビューです:私が見つけた何か奇妙な。私listview.xmlに私は要素をクリックして、私のWebViewの高さ寸法を変更した場合、私は5つの要素を持っている場合、それはこのheigh順で要素

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" android:layout_height="wrap_content" 
android:orientation="vertical" android:padding="3dip"> 
<WebView android:id="@+id/weblistview" android:layout_width="fill_parent" 
    android:layout_height="200dip"></WebView> 

の位置を変更しますです:2 1 0 2 1

問題getView()

答えて

3

は、あなたがホルダー内のビューにタッチリスナーを設定しているされた場合、私は本当に見ていません。 (convertViewnullのとき)このコードは、唯一

リストの最初の目に見える要素のために呼び出されるあなたは正しいので、あなたのコードは次のようになりますconvertViewを返す前に、現在のアイテムにリスナーを設定する必要があります。

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder; 
    if (convertView == null) { 
     holder = new ViewHolder(); 
     convertView = inflater.inflate(R.layout.mylistview2, null, false); 
     holder.mywebviewholder = (WebView) convertView 
       .findViewById(R.id.weblistview); 
     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 
    holder.mywebviewholder 
       .setOnTouchListener(new my.student.application.WebViewClickListener(
         holder.mywebviewholder, parent, position)); 
    holder.mywebviewholder.loadDataWithBaseURL("", mywebview.get(position) 
      .toString(), "text/html", "UTF-8", ""); 
    return convertView; 
} 

所有者とのアイデアは、すべてのfindViewByIDのxmlでの検索を避けることです。

+0

ああ、ついにそれが効いています。あなたの答えをお寄せいただきありがとうございます。今はより単純で論理的です。 – joris

関連する問題