1

グリッドビューを使用したAndroidアクティビティがあり、各セルには1文字のテキストビューが含まれています(したがって、画面には一度に約60〜70文字/セルが表示されます)。グリッドビューのスクロールは、許容できないほど遅く、スムーズではありません。グリッドビューをリストビューに置き換えてみましたが、リストビューのスクロールがはるかに高速です。どうすればこれをスピードアップできますか?

アクティビティのレイアウトは次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <GridView
        android:id="@+id/gridView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:columnWidth="56dp"
        android:numColumns="auto_fit" >
    </GridView>

</LinearLayout>

そして、各セルの中にはこのレイアウトがあります。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:textSize="40sp" />

</LinearLayout>

そして、アクティビティのコードは次のとおりです。

public class TestGridActivity  extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.grid_activity);
        GridView gridView = (GridView) findViewById(R.id.gridView1);
        ArrayList<Map<String, String>> list = getData();
        SimpleAdapter arrayAdapter = new SimpleAdapter(this, list, 
            R.layout.grid_layout, new String[] { "literal"}, 
            new int[] { R.id.textView1});
        gridView.setAdapter(arrayAdapter);
    }

}

編集:アダプターコードの投稿を求めるpks、上記のコードは一般的なsimpleAdapterを使用しましたが、カスタムビューを試しましたが、役に立ちませんでした。

public class GridAdapter extends BaseAdapter {
    private Context context;
    private ArrayList<Map<String, String>> list;
    private LayoutInflater inflater;
    public static class ViewHolder {
    TextView textView1;
    int position;
    }
    public GridAdapter(Context c, ArrayList<Map<String, String>> l) {
        context = c;
        list = l;
        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
    @Override
    public int getCount() {
        return list.size();
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if(convertView == null){
            convertView = inflater.inflate(R.layout.grid_layout, null);
            holder = new ViewHolder();
            holder.textView1 = (TextView) convertView.findViewById(R.id.textView1);
            holder.position = position;
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.textView1.setText(list.get(position).get("character"));
        return convertView;
    }
}

また、事前にすべてのビューを作成してみましたが、スクロール速度は向上しませんでした。

4

0 に答える 0