在listView上显示图像而不滚动?

时间:2016-09-14 05:17:49

标签: android

我使用GridView来显示电池类型的图像。当用户单击任何图像时,该特定电池的功能将在下一页打印。图像和功能从服务器获取。问题是我打开GridView时显示的第一个电池图像,但只有在我滚动屏幕两到三次后,其他电池图像才显示在GridView中。但是我想在打开GridView后显示所有图像。

private void getDatasFromIntent() {
    alHM = new ArrayList<>();
    Intent intent = getIntent();
    String typeResp = intent.getStringExtra("IMG_S");
    try {
        JSONObject jsonObject = new JSONObject(typeResp);
        JSONArray jsonArray = jsonObject.getJSONArray("process");
        for (int i = 0; i < jsonArray.length(); i++) {
            HashMap<String, String> hm = new HashMap<>();
            JSONObject bat_json = jsonArray.getJSONObject(i);
            String battery_featues_id = bat_json.getString("battery_featues_id");
            String battery = bat_json.getString("battery_type");
            String battery_image = bat_json.getString("battery_image");
            battery_image = battery_image.replace("\\", "");
            hm.put("battery_featues_id", battery_featues_id);
            hm.put("battery_type", battery);
            hm.put("battery_image", battery_image);
            alHM.add(hm);
        }

        // prepared arraylist and passed it to the Adapter class
        mAdapter = new GridviewAdapter(this, alHM);

        // Set custom adapter to gridview
        GridView gridView = (GridView) findViewById(R.id.gridView1);
        gridView.setAdapter(mAdapter);

        // Implement On Item click listener
        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                                    long arg3) {
                Toast.makeText(SampleBatteryList.this, "a: " + mAdapter.getItem(position), Toast.LENGTH_SHORT).show();

            }
        });

    } catch (JSONException e) {
        e.printStackTrace();
    }
}
 public class GridviewAdapter extends BaseAdapter {
    private ArrayList<HashMap<String, String>> list;
    private final SampleBatteryList activity;

    public GridviewAdapter(SampleBatteryList sampleBatteryList, 
   ArrayList<HashMap<String, String>> alHM) {
        this.activity = sampleBatteryList;
        this.list = alHM;
        Log.d("VOLLY", "ADP :" + alHM);
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int i) {
        return list.get(i);
    }
    @Override
    public long getItemId(int i) {
        return i;
    }

    public class ViewHolder {
        public ImageView imgViewFlag;
        public TextView txtViewTitle;
        public Button button;
        ViewHolder view;
    }
    @Override
    public View getView(int i, View contentView, ViewGroup viewGroup) {
        Log.d("VOLLY", "INT : " + i);
        ViewHolder view;
        LayoutInflater inflator = activity.getLayoutInflater();
        if (contentView == null) {
            view = new ViewHolder();
            contentView = inflator.inflate(R.layout.grid_content_sub, null);
            view.txtViewTitle = (TextView)   
            contentView.findViewById(R.id.tv_battery_type);
            view.imgViewFlag = (ImageView)    
            contentView.findViewById(R.id.img_battery);
            view.button = (Button) 
          contentView.findViewById(R.id.btn_card_type);
            contentView.setTag(view);
        } else {
            view = (ViewHolder) contentView.getTag();
            view.txtViewTitle.setText(list.get(i).get("battery_type"));
             view.imgViewFlag.setImageResource(R.drawable.branded_logo);
             view.imgViewFlag.setImageDrawable(null);
            Picasso.with(SampleBatteryList.this)
                    .load(Links._img + list.get(i).get("battery_image"))
                    .fit().centerCrop()
                    .into(view.imgViewFlag);
                  final int ii = i;
                final Button btn = view.button;
               view.button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                   btn.setText(list.get(ii).get("battery_type"));
                    btn.setSingleLine(true);

                   YoYo.with(Techniques.TakingOff).duration(2000).playOn(btn);
                    showDialog();
               Log.d("VOLLY", "id :" +list.get(ii).get("battery_featues_id"));
                 callVollyForFeature(list.get(ii).get("battery_featues_id"));
                }
            });
        }

        return contentView;
    }
}

1 个答案:

答案 0 :(得分:0)

这里你使用的是视图持有者类,但在初始化之后,部分和赋值部分都在if和else中,因此没有显示。

  @Override
    public View getView(int i, View contentView, ViewGroup viewGroup) {
        Log.d("VOLLY", "INT : " + i);
        ViewHolder view;
        LayoutInflater inflator = activity.getLayoutInflater();
        if (contentView == null) {
            view = new ViewHolder();
            contentView = inflator.inflate(R.layout.grid_content_sub, null);
            view.txtViewTitle = (TextView)   
            contentView.findViewById(R.id.tv_battery_type);
            view.imgViewFlag = (ImageView)    
            contentView.findViewById(R.id.img_battery);
            view.button = (Button) 
          contentView.findViewById(R.id.btn_card_type);
            contentView.setTag(view);
        } else {
            view = (ViewHolder) contentView.getTag();
            view.txtViewTitle.setText(list.get(i).get("battery_type"));
             view.imgViewFlag.setImageResource(R.drawable.branded_logo);
             view.imgViewFlag.setImageDrawable(null);
            Picasso.with(SampleBatteryList.this)
                    .load(Links._img + list.get(i).get("battery_image"))
                    .fit().centerCrop()
                    .into(view.imgViewFlag);
                  final int ii = i;
                final Button btn = view.button;
               view.button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                   btn.setText(list.get(ii).get("battery_type"));
                    btn.setSingleLine(true);

                   YoYo.with(Techniques.TakingOff).duration(2000).playOn(btn);
                    showDialog();
               Log.d("VOLLY", "id :" +list.get(ii).get("battery_featues_id"));
                 callVollyForFeature(list.get(ii).get("battery_featues_id"));
                }
            });
        }

        return contentView;
    }

更改为

  @Override
    public View getView(int i, View contentView, ViewGroup viewGroup) {
        Log.d("VOLLY", "INT : " + i);
        ViewHolder view;
        LayoutInflater inflator = activity.getLayoutInflater();
        if (contentView == null) {
            view = new ViewHolder();
            contentView = inflator.inflate(R.layout.grid_content_sub, null);
            view.txtViewTitle = (TextView)   
            contentView.findViewById(R.id.tv_battery_type);
            view.imgViewFlag = (ImageView)    
            contentView.findViewById(R.id.img_battery);
            view.button = (Button) 
          contentView.findViewById(R.id.btn_card_type);
            contentView.setTag(view);
        }else{
            view = (ViewHolder) contentView.getTag();
}
            view.txtViewTitle.setText(list.get(i).get("battery_type"));
             view.imgViewFlag.setImageResource(R.drawable.branded_logo);
             view.imgViewFlag.setImageDrawable(null);
            Picasso.with(SampleBatteryList.this)
                    .load(Links._img + list.get(i).get("battery_image"))
                    .fit().centerCrop()
                    .into(view.imgViewFlag);
                  final int ii = i;
                final Button btn = view.button;
               view.button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                   btn.setText(list.get(ii).get("battery_type"));
                    btn.setSingleLine(true);

                   YoYo.with(Techniques.TakingOff).duration(2000).playOn(btn);
                    showDialog();
               Log.d("VOLLY", "id :" +list.get(ii).get("battery_featues_id"));
                 callVollyForFeature(list.get(ii).get("battery_featues_id"));
                }
            });


        return contentView;
    }