2017-04-21 17 views
1

私の英語のために更新されました.. Home_Activityからの私のアプリでは、ボタンをクリックしてカスタムAlertDialogを表示します。このAlertDialog(DialogAdd)内でImageViewをクリックすると、iv1(またはImageButton - 両方は動作しませんでした)と別のカスタムAlertDialogが開きます(選択) - 今のところうまくいきます。今私は私の2番目のAlertDialogを開いて見て、4つの小さな画像を言う。これらの画像の1つをクリックすると、2番目のAlertDialogが閉じるはずで、ImageView(iv1)がAlertDialog 2から選択されたアイコンに変わるはずです。このImageView/ImageButtonを変更するのではなく、すべてを実行しています... I少しアプリに..カスタム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); 
       } 
      } 
     } 

iが無効化ib_dialog_smileでそれを試してみた

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

を選択して、私はのImageButtonを使用してもImageViewの、AppCompatImageView、setImageDrawable、setImageResource ..しかし、画像が更新されますdidntの。 誰かがib_dialog_smileイメージを変更するのに手伝ってもらえますか?

ありがとうございました!

答えて

0

あなたのコードは少し複雑だと思います。 2つのカスタムAlertDialogを作成するために、別々のクラスは必要ありません。各ダイアログごとに2つのXMLレイアウトを作成し、必要な方法でスタイルを設定します(最初のXMLレイアウトでは、選択したImageViewとボタンを、2番目のイメージには4つのイメージを配置します)。

、あなたのhome_activityでビューvarにそれらを膨らませると、このようなalertDialogビューとしてそれらを選択するのは、(選択したアイコン)それらをlayout_1呼ぶことにしましょうとLAYOUT_2(4つのオプション)

完全に働いた
@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(); 
      }); 
     } 
    }); 
} 

私の投票のための&のコメントダイアログ。これがあなたを助けて、コードが読みやすくなったらいいなあと思っています。

関連する問題