当使用JSON数据填充表格布局时,Android会提高性能

密索普

有一个WebService可以在请求时返回500行2darray的JSON字符串。阵列大小约为45KB。填充数据所需的平均时间为20秒。

这是这样做的:

public View PopulateData(String json_data)
{
    ja = new JSONToStringArray(json_data);
    number_of_columns = ja.getColumns();
    al = ja.getArrayList();

    int column_num = 0;
    int row_num = -1;
    Activity activity = (Activity)main;

    table.setId(CTlist.indexOf(CT));

    initialState = new String[(al.size()/number_of_columns)][number_of_columns];

    for (String item : al)
    {   
        if (column_num % number_of_columns == 0)
        {
            row = new TableRow(main);
            row.setGravity(Gravity.CLIP_HORIZONTAL);
            row.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));
            row.setClipChildren(true);
            row.setId(10000 + row_num);
            table.addView(row);             
            column_num = 0;
            row_num++;
        }       




        et = new EditText(main);
        et.setLayoutParams(new TableRow.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
        et.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_FLAG_MULTI_LINE);
        int px = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 150, activity.getResources().getDisplayMetrics());
        et.setMaxWidth(px);
        et.setText(item);
        et.setId(column_num);
        et.setBackgroundResource(R.drawable.rounded_rect);


        initialState[row_num][column_num] = item;


        et.setOnFocusChangeListener(new View.OnFocusChangeListener() {

            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                // TODO Auto-generated method stub
                if (!(v instanceof EditText))
                {                       
                    return;
                }
                EditText tableEt = (EditText)v;

                if(hasFocus)
                {
                    tableEt.setTag(tableEt.getText().toString());
                    tableEt.setText("");
                }
                else
                {
                    if(tableEt.getText().toString().equals(""))
                    {
                    tableEt.setText(tableEt.getTag().toString());
                    tableEt.setTag(null);
                    }

                }
            }
        });

        et.setOnEditorActionListener(new OnEditorActionListener() {

            @Override
            public boolean onEditorAction(TextView arg0, int arg1,
                    KeyEvent arg2) {
                // TODO Auto-generated method stub
                if (arg2.getKeyCode() == KeyEvent.KEYCODE_ENTER)
                {
                    if(arg2.isAltPressed())
                        {
                            return true;
                        }
                    View v = arg0.focusSearch(View.FOCUS_DOWN);
                    if(!(v instanceof EditText))
                    {
                        KeyEvent.changeAction(arg2, KeyEvent.FLAG_CANCELED);
                        return true;
                    }
                    EditText etBelow = (EditText)v;
                    if (etBelow != null)
                    {
                        if (arg0.getText().toString().equals(""))
                        {

                            arg0.setText(arg0.getTag().toString());
                            arg0.setTag("");
                        }
                        etBelow.requestFocus();     
                    }
                    KeyEvent.changeAction(arg2, KeyEvent.FLAG_CANCELED);
                }
                return true;
            }


        }); 

        row.addView(et);
        column_num++;

    }


    view = table;
    return view;
}

任何事情都是可以接受的,甚至可以完全改变我的工作方式,只要它能快速填满我的餐桌即可。

延迟主要是由et.SetText(item);引起的。其次是row.AddView(et);

荒木悠一

我会考虑使用:

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当使用JSON数据填充表格布局时,Android会提高性能

来自分类Dev

使用jquery.detach()是否会提高性能?

来自分类Dev

使用维基百科数据时如何提高性能?网页?

来自分类Dev

使用libpng提高性能

来自分类Dev

使用jq处理大文件时提高性能

来自分类Dev

缓存对齐会提高性能吗?

来自分类Dev

SSD交换会提高性能吗?

来自分类Dev

将扫描线从位图复制到位图时,使用Parallel类会提高性能吗?

来自分类Dev

将扫描线从位图复制到位图时,使用Parallel类会提高性能吗?

来自分类Dev

按字符串相似性对条目进行排序时,使用数据库是否会提高性能?

来自分类Dev

如何使用缓存技术提高性能

来自分类Dev

如何使用WebGL提高性能?

来自分类Dev

使用SQL Server索引提高性能

来自分类Dev

使用DPC ++ oneAPI提高性能

来自分类Dev

使用局部对象提高性能

来自分类Dev

如何使用字典提高性能?

来自分类Dev

仅使用一台计算机/节点时分区会提高性能吗?

来自分类Dev

Redshift按字母排序会提高性能吗?

来自分类Dev

多线程会提高性能吗?场景Java

来自分类Dev

C ++中的宏会提高性能吗?

来自分类Dev

禁用视觉效果会提高性能吗?

来自分类Dev

SQL提高性能

来自分类Dev

skSpriteKit提高性能

来自分类Dev

提高性能-Java

来自分类Dev

CLS 提高性能

来自分类Dev

为什么在使用Coherance时在缓存中保留序列化可提高性能?

来自分类Dev

使用LINQ to SQL查询SQL Azure中频繁更改的列时如何提高性能

来自分类Dev

使用.tif图片进入下一页时,提高性能

来自分类Dev

通过使用numpy unique计数时避免python循环来提高性能