2016-05-18 4 views
0

私はいくつかの画像で問題がありますが、シナリオは、画面が開いたら、私はリストビューで複数の画像を設定していますが、画像の1つが自動的に変更されます。ここアンドロイドで画面を開くとイメージが変わるのを避けるには?

private static final String[] itemname = new String[]{"Invite by Facebook", 
     "Invite by Whatsapp", 
     "Invite by Email", 
     "More options" 
}; 
View header; 
private ListView m_listView; 
private Integer[] imgid = { 
     R.drawable.facebook, 
     R.drawable.whatsapp, 
     R.drawable.em, 
     R.drawable.share 

}; 
private Integer[] imgArrow = { 
     R.drawable.arrow, R.drawable.arrow, R.drawable.arrow, R.drawable.arrow 
}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.refer_earn); 
    init(); 

} 

private void init() { 
    Toolbar m_Toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(m_Toolbar); 
    //noinspection ConstantConditions,ConstantConditions 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    getSupportActionBar().setDisplayShowTitleEnabled(false); 

    CReferAndEarnAdpater adapter = new CReferAndEarnAdpater(this, itemname, imgid, imgArrow); 
    m_listView = (ListView) findViewById(R.id.list); 
    //code to add header and footer to listview 
    LayoutInflater inflater = getLayoutInflater(); 
    ViewGroup header = (ViewGroup) inflater.inflate(R.layout.snippet_item2, m_listView, 
      false); 
    m_listView.addHeaderView(header, null, false); 


    m_listView.setAdapter(adapter); 

} アダプタのコードである: -

private Activity context; 
private String[] itemname; 
private Integer[] imgid; 
private Integer[] imgArrow; 

public CReferAndEarnAdpater(Activity context, String[] itemname, Integer[] imgid, Integer[] imgArrow) { 
    super(context, R.layout.refer_item, itemname); 
    // TODO Auto-generated constructor stub 

    this.context=context; 
    this.itemname=itemname; 
    this.imgid=imgid; 
    this.imgArrow = imgArrow; 
} 

public View getView(int position,View view,ViewGroup parent) { 
    LayoutInflater inflater=context.getLayoutInflater(); 
    View rowView=inflater.inflate(R.layout.refer_item, null, true); 

    TextView txtTitle = (TextView) rowView.findViewById(R.id.title); 
    ImageView imageView = (ImageView) rowView.findViewById(R.id.thumbnail); 
    ImageView arrow = (ImageView) rowView.findViewById(R.id.arrow); 

    txtTitle.setText(itemname[position]); 
    imageView.setImageResource(imgid[position]); 
    arrow.setImageResource(imgArrow[position]); 

    Animation animation = null; 
    animation = AnimationUtils.loadAnimation(context,R.anim.push_up_in); 
    animation.setDuration(1000); 
    rowView.startAnimation(animation); 
    return rowView; 

}; 

}

+0

、あなたのスクリーンショット –

+1

をしてくださいポストは、コードを示して? – Konstantin

+1

あなたのコードを投稿してください... –

答えて

0

あなたがここにViewholderアプローチを使用する必要があります。

private class ViewHolder { 
    TextView textView; 
} 

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

    ViewHolder viewHolder; 
    if (convertView == null) { 
     viewHolder = new ViewHolder(); 
     convertView = View.inflate(mcontext, R.layout.your_layout, null); 
     viewHolder.textView = (TextView) convertView.findViewById(R.id.your_textView); 
     convertView.setTag(viewHolder); 
    } else { 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 

    viewHolder.textView.setText(data.get(position).getText()); 

    return convertView; 
} 

あなたのコードでは、パフォーマンスが低下することができ、リストビューのスクロール中に頻繁に)(findViewByIdを呼ぶかもしれません。アダプタがリサイクルのために膨張したビューを返した場合でも、要素をルックアップして更新する必要があります。 findViewById()を繰り返し使用する方法は、「ビューホルダー」デザインパターンを使用することです。

ViewHolderオブジェクトは、レイアウトのタグフィールド内に各コンポーネントビューを格納するため、繰り返し表示する必要なしにすぐにアクセスできます。

More details you can find here

関連する問題