2016-10-14 10 views
0

リストビューを上にスクロールするとImageViewが表示されるリストに問題があります。リストにデータを追加してListViewは、リストの最初のイメージではなく、現在のイメージを表示します。だから私は、データの変更とnotifyDatasetHasChanged()の呼び出しの後にsetSelectionメソッドを使用します。上記の呼び出しの後にListをもう一度スクロールすると、アダプタからgetView()メソッドの位置が間違っています。ここで Android ListViewAdapterは、データを追加してsetSelection()メソッドを呼び出すと間違った位置を返します。

はコードです:

for (int i = tempPics.size() - 1; i >= 0; i--) { 
    DBChapterPicture pic = (DBChapterPicture) tempPics.get(i); 
    chapterPics.add(0, pic); 
} 

detailAdapter.notifyDataSetChanged(); 
detailListView.setSelection(chapterPics.size() - headState - 1); 

そして、私のアダプタのgetViewメソッド()で実行し、この作品の後に私が誤った位置だ:私はなぜ知らない

@Override 
public View getView(final int position, View convertView, ViewGroup parent) 
{} 

を。私はそれがsetSelection()メソッドによって引き起こされると思います。

ありがとうございます。画像データがロードされていると私はセット高さがある前に、それはsolved.IはImageViewののサイズを設定されています

if (convertView == null) { 
      holder = new Holder(); 
      convertView = inflater.inflate(R.layout.your_row_layout, null); 
      holder.img = (ImageView) convertView.findViewById(R.id.imgId); 

      convertView.setTag(holder); 
     } else { 
      holder = (Holder) convertView.getTag(); 
     } 



class Holder { 
     public ImageView img; 
    } 
+0

Q1:すべてのループの 'chapterPics.add'があなたの' pic'オブジェクトをインデックス0に追加するのはなぜですか? Q2: 'headState'の値は? –

+0

A1:新しく追加された写真がリストの一番上に表示されます。 A2:headStateはオフセットの値です。 – AirTayork

答えて

0

:のようなホルダークラスのオブジェクトを使用して、あなたのgetViewメソッド()メソッドでsetTagとのgetTag方法を設定し

0

非常に大きく、画面の高さの5倍にもなります。そのため、ListViewではアダプタが設定されているときに1つのセルしか作成されません。

+0

getView()メソッドの位置パスが間違っていた、私はそれがホルダーとは何の関係もないと思います。 – AirTayork

+0

@ AirTayorkで試す –

+0

どういう意味ですか? – AirTayork

関連する問題