【问题标题】:How to enlarge a picture in Gridview when it is clicked using a new activity?使用新活动单击时如何在 Gridview 中放大图片?
【发布时间】:2016-05-17 12:52:16
【问题描述】:

所以我有一个扩展 GridView 的活动,我希望它是可点击的,点击后,它会打开一个新活动,显示整个图像,以及我在另一个活动中写入的一些文本。注意确认写入的txt文件写入成功,在SD卡中。

这是 GridView 活动的代码

public class GridView extends AppCompatActivity {

android.widget.GridView gv;
ArrayList<File> list,list2;

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

    File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/MyCameraApp");
    File dir2 = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/MyCameraApp");
    list = imageReader(dir);
    list2 = locationReader(dir2);


    gv = (android.widget.GridView) findViewById(R.id.gridView);
    gv.setAdapter(new GridAdapter());

    gv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent intent = new Intent(GridView.this, ViewImage.class);
            intent.putExtra("MyImage", list.get(position));
            intent.putExtra("MyLocation", list2.get(position));
            startActivity(intent);
            //startActivity(new Intent(getApplicationContext(), ViewImage.class).putExtra("img",list.get(position)));
        }
    });
}

public void BackToMain(View view) {
    Intent backToMain = new Intent(this, MainActivity.class);
    startActivity(backToMain);
}

class GridAdapter extends BaseAdapter{

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

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        convertView = getLayoutInflater().inflate(R.layout.simple_grid, parent, false);
        ImageView iv = (ImageView) convertView.findViewById(R.id.imageView);
        iv.setImageURI(Uri.parse(getItem(position).toString()));

        return convertView;
    }
}


ArrayList<File> imageReader(File root){
    ArrayList<File> a = new ArrayList<>();

    File[] files = root.listFiles();
    for(int i = 0; i < files.length; i++){
        if(files[i].isDirectory()){

        }
        else
        {
            if(files[i].getName().endsWith(".jpg")){
                a.add(files[i]);
            }
        }
    }
    return a;
}
ArrayList<File> locationReader(File root){
    ArrayList<File> a = new ArrayList<>();

    File[] files = root.listFiles();
    for(int i = 0; i < files.length; i++){
        if(files[i].isDirectory()){

        }
        else
        {
            if(files[i].getName().endsWith(".txt")){
                a.add(files[i]);
            }
        }
    }
    return a;
}

}

这是 GridView 调用的 Activity,它应该显示图像并打开我之前写入的文件,并显示其内容(字符串)。

public class ViewImage extends AppCompatActivity {

ImageView imageView;
TextView textView;

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

 //   int image = getIntent().getExtras().getInt("MyImage", R.drawable.common_google_signin_btn_text_light);
    int image = getIntent().getIntExtra("MyImage", R.drawable.cast_ic_notification_0);
    ImageView imageView = (ImageView) findViewById(R.id.imageView2);
    imageView.setImageResource(image);

    Intent calledActivity = getIntent();

    String pos = calledActivity.getExtras().getString("MyLocation");
    textView = (TextView) findViewById(R.id.text_location);
    textView.setText(pos);

}

public void BackToCamera(View view) {
    Intent intent = new Intent(ViewImage.this, MainActivity.class);
    startActivity(intent);
}
}

现在,我看到的只是 R.drawable.cast_ic_notification_0 是图片,而不是 GridView 的图片。另外,TextView 是空的,我使用了调试器,它显示了

String pos = calledActivity.getExtras().getString("MyLocation");

pos 为空。请帮忙!

【问题讨论】:

    标签: android android-arrayadapter android-gridview


    【解决方案1】:

    list.get(position) 是一个文件,您尝试将其读取为 getExtras().getInt()

    我认为你应该将文件路径作为字符串传递:

    intent.putExtra("MyImage", list.get(position).getAbsolutePath());
    

    并收到它:

    File imgFile = new  File(getIntent().getStringExtra("MyImage"));
    if(imgFile.exists()){
        Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
        ImageView imageView = (ImageView) findViewById(R.id.imageView2);
        imageView.setImageBitmap(myBitmap);
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    相关资源
    最近更新 更多