2017-04-21 24 views
1

SRY,我的英語.. 從Home_Activity我的應用程序,我點擊一個按鈕和一個自定義AlertDialog顯示出來。在這個AlertDialog(DialogAdd)中,我點擊一個ImageView說iv1(或ImageButton - 都沒有工作),另一個自定義AlertDialog打開(選擇) - 迄今爲止這麼好。現在我打開了第二個AlertDialog,並看到了4張小圖片。當我點擊這些圖片之一時,第二個AlertDialog應該關閉,並且ImageView(iv1)應該更改爲從AlertDialog 2中選擇圖標。我得到了一切正在運行,但不能更改此ImageView/ImageButton ... 我分離了此行爲到一個小應用程序..不能在自定義AlertDialog內得到定製AlertDialog一個ImageView的,更新的

Home_Activity

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 

public class Home_Activity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 

    Button button = (Button) findViewById(R.id.btn_showDialog); 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      DialogAdd addEntrieActivity = new DialogAdd(Home_Activity.this); 
      addEntrieActivity.createDialogAdd(Home_Activity.this); 
     } 
    }); 
} 

}

DialogAdd

import android.content.Context; 
     import android.support.v7.app.AlertDialog; 
     import android.view.LayoutInflater; 
     import android.view.View; 
     import android.widget.ImageView; 

     public class DialogAdd implements View.OnClickListener, Choose.Choose_Interface { 
      private LayoutInflater inflater; 
      private View view; 
      private Context context; 
      private AlertDialog dialog; 
      private String selectetSmile = null; 
      private ImageView ib_dialog_smile; 

      public DialogAdd(final Context context) { 

       this.context = context; 
       inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       view = inflater.inflate(R.layout.dialog_line, null); 

       ib_dialog_smile = (ImageView) view.findViewById(R.id.ib_dialog_smile); 
       ib_dialog_smile.setOnClickListener(this); 
      } 

      public void createDialogAdd(Context context) { 
       AlertDialog.Builder builder = new AlertDialog.Builder(context); 
       inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       builder.setView(view); 
       dialog = builder.create(); 
       dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent); 
       dialog.show(); 
      } 

      @Override 
      public void onClick(View v) { 
       if(v.getId() == R.id.ib_dialog_smile){ 
        Choose choose = new Choose(context); 
        choose.createDialogChoose(); 
       } 
      } 

      @Override 
      public void selectedSmile(String smile) { 
       selectetSmile = smile; 
       if(selectetSmile.equals("oh")){ 
        ib_dialog_smile.setImageResource(R.drawable.oh); 
       }else if(selectetSmile.equals("oh_nooo")){ 
        ib_dialog_smile.setImageResource(R.drawable.oh_nooo); 
       }else if(selectetSmile.equals("oh_what")){ 
        ib_dialog_smile.setImageResource(R.drawable.oh_what); 
       }else if(selectetSmile.equals("oh_yes")){ 
        ib_dialog_smile.setImageResource(R.drawable.oh_yes); 
       } 
      } 
     } 

選擇

public class Choose { 

      public interface Choose_Interface { 
       void selectedSmile(String flag); 
      } 

      public Choose_Interface mCallback; 
      private View view; 
      private Context context; 
      private LayoutInflater inflater; 
      private AlertDialog dialog; 
      private ImageView oh, oh_nooo, oh_what, oh_yes; 

      public Choose(final Context context) { 
       this.context = context; 
       inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       view = inflater.inflate(R.layout.choose, null); 
       mCallback = new DialogAdd(context); 
       oh = (ImageView) view.findViewById(R.id.oh); 
       oh.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         mCallback.selectedSmile("oh"); 
         Toast.makeText(context, "oh klicked", Toast.LENGTH_SHORT).show(); 
         dialog.dismiss(); 
        } 
       }); 
       oh_nooo = (ImageView) view.findViewById(R.id.oh_nooo); 
       oh_nooo.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         mCallback.selectedSmile("oh_nooo"); 
         Toast.makeText(context, "oh_nooo klicked", Toast.LENGTH_SHORT).show(); 
         dialog.dismiss(); 
        } 
       }); 

       oh_what = (ImageView) view.findViewById(R.id.oh_what); 
       oh_what.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         mCallback.selectedSmile("oh_what"); 
         Toast.makeText(context, "oh_what klicked", Toast.LENGTH_SHORT).show(); 
         dialog.dismiss(); 
        } 
       }); 

       oh_yes = (ImageView) view.findViewById(R.id.oh_yes); 
       oh_yes.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         mCallback.selectedSmile("oh_yes"); 
         Toast.makeText(context, "oh_yes klicked", Toast.LENGTH_SHORT).show(); 
         dialog.dismiss(); 
        } 
       }); 

      } 

      public void createDialogChoose() { 
       AlertDialog.Builder builder = new AlertDialog.Builder(context); 
       inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       builder.setView(view); 
       dialog = builder.create(); 
       dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent); 
       dialog.show(); 
      } 
     } 

我和無效ib_dialog_smile試了一下,我用了一個ImageButton的,也ImageView的,AppCompatImageView,setImageDrawable,setImageResource ..但圖像沒有得到更新。 有人可以幫我改變ib_dialog_smile的形象嗎?

謝謝!

回答

0

我認爲你的代碼有點複雜。您不需要單獨的類來創建兩個自定義AlertDialogs。只需爲每個對話框創建兩個XML佈局,並以您想要的方式對其進行樣式設置(在第一個XML佈局中放置您的「選定」ImageView和按鈕,然後在第二個四個圖像中)。

讓我們稱他們layout_1(選擇圖標)和layout_2(四個選項)

然後在home_activity膨脹那些在視圖中var和選擇他們作爲alertDialog的觀點是這樣的:完美工作

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 

    //Creating the first dialog. 
    AlertDialog.Builder dialogOneBuilder = new AlertDialog.Builder(this); 
    View layout1 = getLayoutInflater().inflate(R.id.layout_1, null); 
    dialogOneBuilder.setView(layout1) 
    AlertDialog dialogOne = dialogOneBuilder.show(); 

    //Finding the chosen icon and button image from dialog 1 
    final ImageView chosenIcon = (ImageView)layout1.findViewById(R.id.chosen_icon); 
    Button chooseButton = (Button)layout1.findViewById(R.id.choose_button); 

    //On button click 
    chooseButton.setOnClickListener(new View.OnClickListener(){ 
     //Creating the second dialog. 
     AlertDialog.Builder dialogTwoBuilder = new AlertDialog.Builder(this); 
     View layout2 = getLayoutInflater().inflate(R.id.layout_2, null); 
     dialogTwoBuilder.setView(layout2) 
     AlertDialog dialogTwo = dialogTwoBuilder.show(); 

     //finding the ImageViews of the four choices 
     ImageView img1 = (ImageView)layout2.findViewById(R.id.img1); 
     ImageView img2 = (ImageView)layout2.findViewById(R.id.img2); 
     ImageView img3 = (ImageView)layout2.findViewById(R.id.img3); 
     ImageView img4 = (ImageView)layout2.findViewById(R.id.img4); 

     //Add them in a LinkedList helps to shrink your code 
     LinkedList<ImageView> choices = new LinkedList<>(); 
     choices.add(img1); 
     choices.add(img2); 
     choices.add(img3); 
     choices.add(img4); 

     //Now set ONE ClickListener for all choices 
     for(int i = 0; i < choices.size(); i++){ 
      choices.get(i).setOnClickListener(new View.OnClickListener(){ 
       //change your icon to the chosen image 
       chosenIcon.setImageDrawable(choices.get(i).getDrawable()); 

       //And close the second dialog. 
       dialogTwo.dismiss(); 
      }); 
     } 
    }); 
} 

爲我的投票&評論對話框。希望這有助於你和代碼的可讀性。