【问题标题】:Trying to display an Image from gallery to a dynamically created ImageView尝试将图像从图库显示到动态创建的 ImageView
【发布时间】:2017-08-19 18:46:49
【问题描述】:

我正在尝试显示从图库中获取的图像。我不能像通常那样打电话给setImageBitmap。那是因为尚未创建 ImageView 吗?

公共类 MainActivity 扩展 AppCompatActivity {

int RESULT_LOAD_IMAGE = 1;


//LIST OF ARRAY STRINGS WHICH WILL SERVE AS LIST ITEMS
ArrayList<ImageView> listItemImg=new ArrayList<>();

//DEFINING A STRING ADAPTER WHICH WILL HANDLE THE DATA OF THE LIST VIEW
ArrayAdapter<ImageView> adapter;

//RECORDING HOW MANY TIMES THE BUTTON HAS BEEN CLICKED
int clickCounter=0;
private ListView mListView;

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


    if (mListView == null) {
        mListView = (ListView) findViewById(R.id.picsListView);
    }

    adapter = new ArrayAdapter<>(this, R.layout.item_layout, R.id.picImageView, listItemImg);

    setListAdapter(adapter);

}

这是单击按钮时调用的方法。

public void addStuff(View view) {

    Intent gallery = new Intent(Intent.ACTION_GET_CONTENT);
    gallery.setType("image/*");
    startActivityForResult(gallery, RESULT_LOAD_IMAGE);

}


//METHOD WHICH WILL HANDLE DYNAMIC INSERTION


protected ListView getListView() {
    if (mListView == null) {
        mListView = (ListView) findViewById(R.id.picsListView);
    }
    return mListView;
}

protected void setListAdapter(ListAdapter adapter) {
    getListView().setAdapter(adapter);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if(requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK){
        Uri imageUri = data.getData();
        Bitmap bitmap = null;
        try {
            bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), imageUri);

            //This is the ImageView in which I'm trying to display the selected Image.
            listItemImg.set(clickCounter, bitmap);
        } catch (IOException e) {
            e.printStackTrace();
        }

        clickCounter++;
        adapter.notifyDataSetChanged();
    }
}


}

对不起,如果问题太基本了。我找不到任何使用无处的例子。

【问题讨论】:

    标签: android listview android-intent


    【解决方案1】:

    您为 ListView 设置了一个错误的适配器。如果直接使用 ArrayAdapter,则只能将给定数组中对应的 String 对象放置到 TextViews 中。

    在这种情况下,您需要通过扩展 ArrayAdapter(或任何适配器)来制作一个自定义适配器并覆盖 getView(int, View, ViewGroup) 方法。

    Here 是一个很好的关于适配器和适配器视图的教程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-22
      • 1970-01-01
      • 2016-02-10
      • 1970-01-01
      • 2013-01-18
      • 2015-04-26
      • 1970-01-01
      • 2016-07-10
      相关资源
      最近更新 更多