将元素动态添加到活动的最佳策略

时间:2014-10-30 10:35:00

标签: android performance

我正在尝试制作一个能够捕获最多4张图像的活动,以便将它们发送到我们的服务器。 我知道如何捕捉图像并将其添加到活动,这已经可行,以非效率优雅方式,我我希望改善这一点。

现在,我Button使用onClick方法将图片附加到空ImageView,并跟踪已附加了多少图像,因为我可以删除一张图片,以便挑选一张新图片。

我想知道最佳策略,代码明智的未来变化。

我考虑过但尚未实施的选项:

  • Button将图片添加到GridView,以便我可以在其适配器中添加和删除图片。
  • ImageView可以onClick附加和删除自己的图片,因此会移除Button

任何建议,想法,策略,想法?

提前谢谢!

编辑1:我改进代码的第一种方法

我已使用自定义适配器(GridView

实施了GridImageAdapter
public class GridImagesAdapter extends BaseAdapter{
    private List<Bitmap> images = new ArrayList<Bitmap>();
    private int img_height;
    public GridImagesAdapter(Context context, List<Bitmap> imagenes){
        this.imagenes = imagenes;
        inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
        DisplayMetrics metrics = context.getResources().getDisplayMetrics();
        img_height = (int) (metrics.density * Constants.ONE_ROW_IMG_HEIGHT);
    }
    /*
     * other common methods
     */
    @Override
    public View getView(int position, View row, ViewGroup parent) {
        ViewHolder holder;
        if(row == null){
            row = inflater.inflate(R.layout.grid_img_item, parent, false);
            holder = new ViewHolder();
            holder.image = (ImageView) row.findViewById(R.id.img_add_in_grid);
            holder.image.setLayoutParams(new GridView.LayoutParams(LayoutParams.MATCH_PARENT, img_height));
            holder.image.setScaleType(ImageView.ScaleType.CENTER_CROP);
        }else{
            holder = (ViewHolder)row.getTag();
        }
        holder.image.setImageBitmap(getItem(position));
        row.setTag(holder);
        return row;
    }

    private class ViewHolder{
        ImageView image;
    }
}

所以我可以在活动中填充GridView,如:

private void populateGridView(){
    Bitmap a;
    a = BitmapFactory.decodeResource(getResources(), R.drawable.no_image);
    images.add(a);
    images.add(a);
    images.add(a);
    images.add(a);
    GridImagesAdapter adapter = new GridImagesAdapter(this, images);
    mGridView.setAdapter(adapter);
    mGridView.setOnItemClickListener(new GetImage());
}

其中new GetImage()是负责图像捕获的OnItemClickListener,并替换R.drawable.no_image位图中的一个 (其中没有相关代码,只是向用户显示Dialog以便从相机或图库中选择并启动此类Activity,然后在onActivityResult方法中我有{ {1}}使用的是我处理适配器更改的地方)


我的问题更多是关于此处选择的策略而不是实际代码本身。 缺点?是否有更优雅或正确的方法来达到同样的效果?

欢迎一切,谢谢你的答案。

2 个答案:

答案 0 :(得分:1)

您是否创建了一个gridview并设置了适配器类?

因为我已经实施了类似的案例。项目被动态地(通过用户输入)添加到列表视图中,并且每行中都有一个按钮来删除该特定行(也来自数据库)。

如果你有,请告诉我们从哪里开始。

答案 1 :(得分:0)

您的总体想法或多或少是正确的。你提到GetImage是无关紧要的,但绝对不是。从我的理解,你正在那里直接改变视图。相反,您应该操纵适配器,更改它所持有的数据,然后调用notifyDataSetChanged。适配器将负责通知gridview数据已更改并且视图将更新。我可能也会使用ArrayAdapter而不是BaseAdapter。