【问题标题】:how to populate a ListView with images from camera如何使用来自相机的图像填充 ListView
【发布时间】:2014-05-21 14:29:29
【问题描述】:

我能够使用我的相机中的图像 URI 填充列表项。如何将确切的图像显示为列表项。

以下是我正在使用的列表视图(列表项是文本视图)。我想对图像做同样的事情。

ListView listview ;
ArrayList<String> list = new ArrayList<String>();
private File getOutputMediaFile(){

    File mediaStorageDir = new File(imgLink);

    if (! mediaStorageDir.exists()){
        if (! mediaStorageDir.mkdirs()){
            Log.d("MyCameraApp", "failed to create directory");
            return null;
        }
    }

    // Create a media file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    File mediaFile;
        mediaFile = new File(mediaStorageDir.getPath() + File.separator +
        "IMG_"+ timeStamp + ".jpg");}

public void onPictureTaken(byte[] data, Camera camera) {

        File pictureFile = getOutputMediaFile();
        if (pictureFile == null){
            Log.d(TAG, "Error creating media file, check storage permissions ");
            return;
        }
        try {
            FileOutputStream fos = new FileOutputStream(pictureFile);
            fos.write(data);
            fos.close();
            } catch (FileNotFoundException e) {
            Log.d(TAG, "File not found: " + e.getMessage());
        } catch (IOException e) {
            Log.d(TAG, "Error accessing file: " + e.getMessage());
            }

        if (list.contains(pictureFile.toString())) 
        {
            System.out.println(pictureFile+ " -> already present");
        }
        else
        {
             list.add(pictureFile.toString());
             System.out.println(pictureFile + " added");
        }
        polulateList();}

public void polulateList()
{

    ArrayAdapter<String> listAdapter = new ArrayAdapter<String>(this,R.layout.list_item, list);
    listview.setAdapter(listAdapter);

}

【问题讨论】:

  • 这是我正在使用的 "list_item.xml" schemas.android.com/apk/res/android" android:layout_width ="match_parent" android:layout_height="50dp" android:layout_margin="5dp" />
  • 在list_item.xml 中添加一个imageview。并在 CustomAdapter 中使用“imageView.setImageURI(list.get(position));”
  • 'code'schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height= "50dp" android:layout_margin="5dp" android:contentDescription="image" /> '代码'
  • 假设我正在使用这个,我需要添加什么? @Anilkumar
  • 将 CustomAdapter 用于列表视图...您使用过 BaseAdapter 吗?

标签: android listview android-listview


【解决方案1】:

当您将项目插入列表时,只需调用listAdapter.notifyDataSetChanged();

【讨论】:

    【解决方案2】:
    protected void populateMyList(File pictureFile) {
        // TODO Auto-generated method stub
    
    
            String[] s = pictureFile.toString().split("/");
            String caption = s[7];
            mylist.add(new PopulateList(Uri.fromFile(pictureFile), caption));
            listAdapter = new MyListAdapter();
            listview.setAdapter(listAdapter);
    
    
    }
    public class MyListAdapter extends ArrayAdapter<PopulateList> {
    
        public MyListAdapter(){
            super(CameraActivity.this, R.layout.img_list,mylist);
    
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
    
            //inflate the view
            View myView = convertView;
            if (myView == null){
                myView = getLayoutInflater().inflate(R.layout.img_list, parent , false);
            }
    
            //populate the list
            PopulateList imageTaken = mylist.get(position);
    
            ImageView imgView = (ImageView)myView.findViewById(R.id.img);
    
            imgView.setImageURI(imageTaken.getLink());
            System.out.println(imgLink+imageTaken.getCaption());
            /*TextView txtView = (TextView)findViewById(R.id.caption);
            txtView.setVisibility(View.VISIBLE);
            txtView.setText(imageTaken.getCaption());*/
    
            return myView;
    
        }       
    

    【讨论】:

      【解决方案3】:
              @Override
          public View getView(int position, View convertView, ViewGroup parent) {
              // TODO Auto-generated method stub
      
              // inflate the view
              View myView = convertView;
              if (myView == null) {
                  myView = getLayoutInflater().inflate(R.layout.img_list, parent,
                          false);
              }
              // populate the list
              PopulateList imageTaken = mylist.get(position);
              ImageView imgView = (ImageView) myView.findViewById(R.id.img);
              imgView.setImageURI(imageTaken.getLink());
              System.out.println(imgLink + imageTaken.getCaption());
              /*
               * TextView txtView = (TextView)findViewById(R.id.caption);
               * txtView.setVisibility(View.VISIBLE);
               * txtView.setText(imageTaken.getCaption());
               */
      
              return myView;
      
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-13
        • 1970-01-01
        • 1970-01-01
        • 2016-07-25
        • 1970-01-01
        相关资源
        最近更新 更多