0

テキストを含むグリッドビューを表示しようとしています。基本的には、1年の毎日に対して7〜8個の値が表示されます。そうです、かなり早く大きくなります。

そして、下にスクロールしようとして真ん中にいると、メモリが不足します。これが私がやろうとしている方法です

public View getView(int position, View convertView, ViewGroup parent) {
        dateView = new TextView(mContext);
        dateView.setText(dateArray.get(position));
        dateView.setSingleLine(true);
        // dateview.setLayoutParams(new GridView.LayoutParams(70, 70));
        Log.d("--in get view--", "");
                return dateView;
}

現在画面に表示されていないビューを解放するなど、より良い方法はありますか?

4

2 に答える 2

3

ビューを再利用する必要があります。これで、呼び出されるTextViewたびに新しいインスタンスを作成します。getViewしかし、あなたは与えられていますconvertView。Android はすべてのビューをキャッシュして再利用するため、行ごとに 1000 ビューではなく、約 10 ~ 20 (画面に表示される数) のビューを使用して再利用します。convertView最初にnullでないかどうかを確認してから、キャストTextViewしてテキストを入力する必要があります。それ以外の場合TextViewは、現在行っているように手動で作成して返す必要があります。このチュートリアルを確認してください: http://www.vogella.com/articles/AndroidListView/article.html 5.2 ConvertView。

于 2012-11-25T14:11:55.110 に答える
1

行表示(上下に移動)ごとに新しいdateViewを作成しています。レイアウト インフレートを使用します。これを使用するには、アダプター レイアウトを作成し、getview でそれをキャッチします。

public static class ViewHolder {
        public TextView textView;       
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        View vi = convertView;
        ViewHolder holder;
        try {

            if (convertView == null) {
                vi = inflater.inflate(R.layout.yourTextviewInIt, null);
                holder = new ViewHolder();
                holder.textView = (TextView) vi.findViewById(R.id.textView);                
                vi.setTag(holder);
            } else {
                holder = (ViewHolder) vi.getTag();
            }

            holder.textView.setText(dateArray.get(position));
            holder.textView.setSingleLine(true);

        } catch (Exception e) {

        }
        return vi;
    }
于 2012-11-25T14:17:23.323 に答える