有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在listview中显示图像:应用程序可能在其主线程上做了太多工作

我有一个在listview中显示一些本地图像的应用程序。当我运行应用程序时,logcat会说

Skipped 43 frames! The application may be doing too much work on its main thread.

任何建议都会有帮助,谢谢

这是密码

主要活动。爪哇

import 安卓.app.Activity;
import 安卓.support.v7.app.AppCompatActivity;
import 安卓.os.Bundle;
import 安卓.view.View;
import 安卓.widget.AdapterView;
import 安卓.widget.ListView;
import 安卓.widget.Toast;

public class MainActivity extends Activity {

    ListView list;
    String[] web = {
            "Google Plus",
            "Twitter",
            "Tall",
    };

    Integer[] imageId = {
            R.drawable.gggggggggg,
            R.drawable.hhhhhhhhhh,
            R.drawable.ttttttttttt
    };

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

        CustomList adapter = new
                CustomList(MainActivity.this, web, imageId);
        list=(ListView)findViewById(R.id.list);
        list.setAdapter(adapter);
        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                Toast.makeText(MainActivity.this, "You Clicked at " +web[+ position], Toast.LENGTH_SHORT).show();

            }
        });

    }
}

这是客户名单。爪哇

import 安卓.app.Activity;
import 安卓.view.LayoutInflater;
import 安卓.view.View;
import 安卓.view.ViewGroup;
import 安卓.widget.ArrayAdapter;
import 安卓.widget.ImageView;
import 安卓.widget.ListAdapter;
import 安卓.widget.TextView;

import java.util.ArrayList;

public class CustomList extends ArrayAdapter<String>{

    private final Activity context;
    private final Integer[] imageId;
    public CustomList(Activity context,
                      String[] web, Integer[] imageId) {
        super(context, R.layout.list_single, web);
        this.context = context;
        this.imageId = imageId;

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

        LayoutInflater inflater = context.getLayoutInflater();
        View rowView= inflater.inflate(R.layout.list_single, null, true);


        ImageView imageView = (ImageView) rowView.findViewById(R.id.img);
        imageView.setImageResource(imageId[position]);

        return rowView;

    }
}

共 (3) 个答案

  1. # 3 楼答案

    1)使用viewHolder保存所有的.findViewById-因为这对于android来说是一项繁重的操作,现在它总是在你滚动时调用它

    2)为了更好地加载图像,请使用来自Volley库的ImageLoader,它具有图像缓存,您将节省大量ram

    3)对于项目的点击,在适配器中组织接口,然后在活动中实现它,所以点击后,您将能够在活动中调用接口和操作