0

可以通過AsyncTask獲取的結果更新自定義AlertDialog中的圖片嗎?系統會提示用戶輸入另一個用戶名,如果所輸入的用戶名有效,AsyncTask將檢查該用戶名。當返回布爾結果時,AsyncTask更新顯示檢查(對於有效)或X(對於無效)的用戶名旁邊的圖像。運行AsyncTask檢查輸入到自定義AlertDialog中的數據

我的自定義AlertDialog是被通過下面的代碼膨脹:

Fragment1 extends Fragment { 

    public boolean onOptionsItemSelected(MenuItem item){ 
     switch (item.getItemId()){ 
     ... 
     case 1: 
      LayoutInflater inflater = getActivity().getLayoutInflater(); 
      View usernamePrompt = inflater.inflate(R.layout.alertdialog_username, ViewGroup)getActivity().getCurrentFocus()); 

      AlertDialog.Builder alert = new AlertDialog.Builder(getActivity()); 
      alert.setTitle("Send New Friend Request"); 
      alert.setView(usernamePrompt); 
      alert.show(); 
      return true; 
     ... 

佈局只包含一個ImageView的旁邊一個EditText:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" > 

    <EditText 
     android:id="@+id/ad_et" 
     android:layout_width="0dip" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:inputType="textVisiblePassword|textNoSuggestions" /> 

    <ImageView 
     android:id="@+id/welcomescreen_iv_username_okay" 
     style="@style/spacing_5" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/x" /> 

</LinearLayout> 

中的AsyncTask真的只是返回一個布爾值,但我不知道如何從這個信息更新AlertDialog中包含的視圖。這甚至有可能嗎?

編輯:這裏的的AsyncTask。(我沒加它最初是因爲我把它叫,簡單地更新一個TextView是分片(即updateUsernameView(布爾參考isValid))的部分方法我能找到如何從它所託管的Fragment中訪問AlertDialog中的視圖。我可以在EditText視圖添加一個TextWatcher,並觸發一個新的AsyncTask onTextChanged嗎?我將試試看看它是否可用,並讓所有人知道了。

private class CheckNewUsernameTask extends AsyncTask<String, Void, Boolean> { 
    private static final String TAG = "CheckNewUsernameTask"; 

     @Override 
     protected Boolean doInBackground(String... params){ 
      String response = ClearNetworking.checkUsername(params[0]); 
      Boolean result = null; 

      try { 
       JSONObject jsonResponse = new JSONObject(response); 
       if (jsonResponse.has(ClearJSONParser.KEY_AVAILABLE)){ 
        result = jsonResponse.getBoolean(ClearJSONParser.KEY_AVAILABLE); 
       } 
      } catch (JSONException e) { 
       Log.e("TAG", "JSONException", e); 
      } 
      return result; 
     } 

     @Override 
     protected void onPostExecute(Boolean result){ 
      if (result != null){ 
       updateUsernameView(result); 
      } else { 
       updateUsernameView(false); 
      } 
       Log.i(TAG, "... available = " + result); 
      } 
     } 
    } 
+0

哪裏是AsyncTask? – Blackbelt

+0

好吧,虐待它添加它,它的一個基本的Http請求 – ChrisMcJava

回答

1

以下片段將適用於您。只要您獲得結果,立即更新imageview。

查看usernamePrompt = inflater.inflate(R.layout.alertdialog_username, ViewGroup)getActivity()。getCurrentFocus());

ImageView view=(ImageView)usernamePrompt.findViewById(R.id.welcomescreen_iv_username_okay); 
    view.setImageBitmap(....); 
0

聲明會員吹氣,usernameprompt,警惕全球。在你一個的onPostExecute方法 使用下面的代碼同步任務。

inflater = getActivity().getLayoutInflater(); 
usernamePrompt = inflater.inflate(R.layout.alertdialog_username, ViewGroup)getActivity().getCurrentFocus()); 
usernamePrompt.findviewbyid("your image views id").setImageResource(new image resource); 
alert.setView(usernamePrompt); 
alert.show();