更改ImageView源不会正确更改ImageView的图像

时间:2015-04-05 07:18:28

标签: android android-fragments android-activity android-imageview

实际上它正在变化但变成了空白!

在我的应用程序中,我将从数据库中获取我的图像路径并在主要活动中显示它们。此过程通过在DialogFragment中选择图像的缩略图并将其记录ID发送到主Activity,并在Fragment-Activity之间进行通信来实现。 在这一点上,我将使用Asynctask内部类来获取所选图像的FilePath并将其显示给ImageView。

Everythings完美无缺,除了ImageView没有正确显示它,它只显示空白!

P.S。:FilePath是正确的,我在应用程序的某个地方的onActivityResult中使用它。

谢谢。

主要活动代码:

public class AnnotateDiagramActivity extends Activity implements Communicator {

 @Override
    public void respond(String data , int requestCode) {
        //Passing Project ID from CPDialogFragment or PLDialogFragment


        switch(requestCode) {

        case OPEN_PROJECTID:
            PROJECTID = Integer.valueOf(data);
            loadProject(PROJECTID);
            ToastShort(data);
            break;
        default:
            break;

    }


}

  public class loadMainImage extends AsyncTask<Project,Integer,String>
{

    @Override
    protected String doInBackground(Project... params) {


        return project.GetFilePath();
    }

    protected void onPostExecute( String result) {
   //here is my main issue:

        fragmentView.setImageBitmap(new ImageDecoder().decodeFile(new File(project.GetFilePath())));

        fragmentView.postInvalidate();
    }

}

 public void loadProject(int ID)
{
    project = new Project();
    project= expertDbHelper.getProject(ID);
    SharedPreferences openedProject = getSharedPreferences("openedProject", 0);
    SharedPreferences.Editor projectEditor = openedProject.edit();
    projectEditor.putInt("id",project.GetID());
    projectEditor.putString("filePath",project.GetFilePath());
    projectEditor.commit();

    new loadMainImage().execute(project);
}

}

用于验证从文件路径返回图像的编辑:

 protected void onPostExecute( String result) {
        ImageDecoder imageDecoder = new ImageDecoder();
        Bitmap bmp = null;
        File file =new File(result); 
        if(file.isFile()) {
            bmp=imageDecoder.decodeFile(file,500);
            fragmentView.setImageBitmap(bmp);
            fragmentView.postInvalidate();
        }
        else
        { Log.e("Async Task Is File: " ,String.valueOf(file.isFile()));}

    }

1 个答案:

答案 0 :(得分:0)

我发现由于从先前加载的图像计算的某些条件,我的图像设置不正确,所以我检查我的代码并在我的代码中查找(布局布尔参数)需要重置。

protected void onPostExecute( String result) {

        ImageDecoder imageDecoder = new ImageDecoder();
        Bitmap bmp = null;
        File file =new File(result);
        Log.e("Async Task Result: " ,result);
        if(file.isFile()) {
            bmp=imageDecoder.decodeFile(file,500);
            fragmentView.reset();
            fragmentView.recycle();
            fragmentView.layout= false;
            fragmentView.setImageBitmap(bmp);
        }
        else
        {
            Log.e("Async Task Is File: " ,String.valueOf(file.isFile()));
        }

    }
相关问题