簡體   English   中英

更改ImageView源不會正確更改ImageView的圖像

[英]Changing ImageView Source Does not Change Properly Image of ImageView

實際上,它正在改變,但是變成空白!

在我的應用程序中,我將從數據庫中獲取我的圖像路徑,並在主要活動中顯示它們。 這個過程是通過在DialogFragment中選擇圖像的縮略圖並將其記錄ID與用於在Fragment-Activity之間進行通信的接口發送給Main Activity來實現的。 此時,我將使用Asynctask內部類獲取所選Image的FilePath並將其顯示給ImageView。

一切正常,除了ImageView不能正確顯示而只是空白!

PS: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()));}

    }

我發現由於某些條件是根據先前加載的圖像計算得出的,因此我的圖像設置不正確,因此我檢查了代碼並在我的代碼中找到了需要重新設置的(布局布爾參數)。

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()));
        }

    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM