2017-04-21 6 views
1

내 영어 용으로 업데이트되었습니다. 내 응용 프로그램에서 Home_Activity에서 Button을 클릭하고 사용자 정의 AlertDialog가 표시됩니다. 이 AlertDialog (DialogAdd) 내에서 ImageView를 클릭하면 iv1 (또는 ImageButton - 둘 다 작동하지 않음)과 다른 사용자 정의 AlertDialog가 열립니다 (선택) - 지금까지는 그렇게 좋습니다. 이제 제 2 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); 
       } 
      } 
     } 

내가 무효화 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 또한 이미지 뷰, AppCompatImageView, setImageDrawable, setImageResource ..하지만 이미지가 업데이트됩니다 didnt는을 사용했다. ib_dialog_smile 이미지를 변경하려면 누군가 도와주세요.

감사합니다.

답변

0

코드가 약간 복잡하다고 생각합니다. 두 개의 커스텀 AlertDialog를 생성하기 위해 별도의 클래스가 필요하지 않습니다. 모든 대화 상자마다 각각 두 개의 XML 레이아웃을 만들고 원하는 스타일로 스타일을 지정하십시오. 첫 번째 XML 레이아웃에서는 "selected"ImageView와 버튼을 넣고 두 번째 이미지에는 네 개의 이미지를 넣으십시오.

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

완벽하게 작동 :

은 다음 home_activity이 같은에 AlertDialog보기로를 뷰 VAR 사람들을 팽창 선택

의가 (선택 아이콘)을 layout_1 부르 자 및 LAYOUT_2 (네 가지 옵션) 내 투표 & 주석 달기 대화. 희망이 당신을 도왔습니다 코드가 읽을 수있다.