如何最小化UI中的操作

螺旋

我正在开发一个应用程序,并且想在gridview中(以编程方式创建)显示一些随机出现的图像。我将图像保存在drawables文件夹中,并且从数据库中获得了图像的名称。我的问题是从数据库(列表)中获取数据,随机地重新组织并创建gridView的视图需要花费太多时间。我尝试使用异步任务获取随机列表,但由于尚未创建列表,因此在我开始创建gridView时收到nullPointerException。如果我等到创建列表,就会遇到同样的问题。

我将向您解释游戏的情况,这将帮助您理解为什么我会在活动中进行随机重组。

在数据库中,我有成对的字符(受害者和凶手),在活动中我所需要的比我要多,因为每次打开应用程序时我都希望得到不同的字符。因此,我从数据库中获得了随机配对的角色列表(受害者和凶手)。之后,我必须将它们显示在gridView中,并且必须将它们无序显示,这是我认为很耗时的方法(实际上是该方法和SQLite数据库查询)。我必须重新组织两次清单,因为我需要有相同数量的受害者和凶手。

我现在将向您展示我正在使用的代码

protected void onCreate(Bundle savedInstanceState) {


            Intent intent = getIntent();
            numRows = intent.getIntExtra("NumRows", 1);
            numColumns = intent.getIntExtra("NumColumns", 1);
            totalTime = intent.getIntExtra("Time", 30);
            level = intent.getIntExtra("Level", 1);

            ....
            new PrepareListMurder(this, level, numRows, numColumns).execute();

            preferences = PreferenceManager.getDefaultSharedPreferences(this);

            mGridLayout = (GridLayout) findViewById(R.id.gridLayout);

            mGridLayout.setColumnCount(numColumns);
            mGridLayout.setRowCount(numRows);

            //DBUtilities = DataBaseUtilities.getInstance(this);

            Point size = new Point();
            getWindowManager().getDefaultDisplay().getSize(size);
            int screenWidth = size.x;
            int screenHeight = size.y;
            int margin = 10;
            for (int i=0; i<numRows; i++){
                for (int j=0; j<numColumns; j++){
                    int aux = i;
                    GridLayout.Spec row = spec(i);
                    GridLayout.Spec col = spec(j);
                    ImageView img = createImageView(pos);
                    GridLayout.LayoutParams params = createParams(row, col, margin, screenWidth, screenHeight);
                    mGridLayout.addView(img, params);
                    pos++;      }


            }

这些是创建imageView和LayoutParams的方法。(subList是包含字符名称的随机排序列表,我应该通过异步任务来获取它

private ImageView createImageView(int pos){
    ImageView img = new ImageView(this);
    String character = subList.get(pos);
    Log.d("lista", subList.toString());
    int img_id = this.getResources().getIdentifier(character.toLowerCase().replace(" ", "_"), "drawable", this.getPackageName());
    img.setImageResource(img_id);
    img.setScaleType(ImageView.ScaleType.CENTER_CROP);
    img.setAdjustViewBounds(true);
    img.setOnClickListener(this);
    img.setTag(character);
    return img;
}
private GridLayout.LayoutParams createParams(GridLayout.Spec row, GridLayout.Spec col, int margin, int screenWidth, int screenHeight){
    GridLayout.LayoutParams params = new GridLayout.LayoutParams(row, col);
    params.width = screenWidth / numColumns - 2*margin;
    params.height = screenHeight / numRows - 2*margin;
    params.setMargins(margin, margin, margin, margin);
    return params;
}

这是用于创建字符列表的代码

public class PrepareListMurder extends AsyncTask<Void, Void, List<String>> {

    private ProgressDialog pDialog;
    private Context context;
    private String errorMesaje;
    private int level;
    private int numRows;
    private int numColumns;


    public PrepareListMurder(Context context, int level, int nR, int nC){
        this.context = context;
        this.level = level;
        this.numColumns = nC;
        this.numRows = nR;
    }



    protected List<String> doInBackground(Void... params) {
        DataBaseUtilities DBUtilities = DataBaseUtilities.getInstance(context);
        ArrayList<String> mMurderVictimList = DBUtilities.getSelectedMurderStringList(level);
        List<String> subList = new ArrayList<>(mMurderVictimList.subList(0,numRows*numColumns));
        Collections.shuffle(subList);
        return subList;
    }

    @Override
    protected void onPostExecute(List<String> chars) {
        super.onPostExecute(chars);
        ((CallBackFile) context).createListMurder(chars);
        pDialog.dismiss();
    }

我在doInBackground()中使用的代码是我以前在该活动的onCreate()中使用的代码,但是该活动花费了太长时间才能打开,并且如果我想显示一个具有4行4列的“大” gridView崩溃,我得到一个java.lang.OutOfMemoryError(工作较少的列或行即可正常工作)。

我该怎么做?

谢谢你的时间!!

螺旋

在将图像加载到imageView中之前,我已经阅读了位图尺寸,并且已按照Android开发人员的建议将缩小版本加载到内存因此,我避免了在不增加堆内存的情况下耗尽内存的问题。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在HTML中操作最小化的属性值

来自分类Dev

如何最小化jQuery中的代码

来自分类Dev

如何最小化脚本 UI 中的某些统计信息 - Unity

来自分类Dev

我可以将“最小化”按钮操作更改为“隐藏”,而不是Mac中的默认“最小化”吗?

来自分类Dev

电子:如何最小化渲染过程中的窗口

来自分类Dev

如何在摆动中自动最小化

来自分类Dev

如何最小化ViewModel中的代码到对象的转换?

来自分类Dev

如何最小化Python中的特定窗口

来自分类Dev

如何在C#中打开最小化表单

来自分类Dev

如何在GAMS中设置最小化问题

来自分类Dev

如何最小化tarantool中的HDD使用

来自分类Dev

如何最小化Python中的特定窗口

来自分类Dev

如何使用目标C最小化Mac中的窗口?

来自分类Dev

如何在 gnome 中启动最小化的 xterm

来自分类Dev

如何在 AwesomeWM 4.2 中禁止最小化?

来自分类Dev

如何最小化vuejs中的数据流量

来自分类Dev

如何最小化webpack包的大小?

来自分类Dev

如何使用Deap最小化功能?

来自分类Dev

最小化如何隐藏我的表单?

来自分类Dev

如何隐藏或最小化Xamarin应用

来自分类Dev

如何最小化NavigationView / NavigationDrawer?

来自分类Dev

如何最小化.htaccess规则?

来自分类Dev

如何最小化多个子查询?

来自分类Dev

如何最小化启动Android通知

来自分类Dev

如何最小化向量的加载时间?

来自分类Dev

如何最小化此ajax代码?

来自分类Dev

如何使Google Hangouts最小化?

来自分类Dev

最小化如何隐藏我的表单?

来自分类Dev

如何使用Deap最小化功能?