2014-02-20 2 views
0

도움이 필요합니다. 내 대화창에는 2 개의 라디오 버튼이 있습니다. 사용자가 어떤 라디오 버튼을 선택했는지에 따라이 대화 상자에서 일부보기를 비활성화하거나 활성화하려고합니다.동적으로 대화보기를 사용/사용 중지하는 방법

대화에 대한 내 레이아웃 : inc_dialog.xml이 대화의

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <EditText 
     android:id="@+id/inc_name" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="4dp" 
     android:layout_marginLeft="4dp" 
     android:layout_marginRight="4dp" 
     android:layout_marginTop="16dp" 
     android:hint="Название дохода" 
     /> 

    <EditText 
     android:id="@+id/inc_value" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="16dp" 
     android:layout_marginLeft="4dp" 
     android:layout_marginRight="4dp" 
     android:layout_marginTop="4dp" 
     android:hint="Сумма дохода" 
     /> 

    <TextView 
     android:id="@+id/tvChkBoxIncType" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="6dp" 
     android:layout_marginLeft="16dp" 
     android:layout_marginRight="4dp" 
     android:layout_marginTop="4dp" 
     android:text="Тип дохода:" /> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 

     <RadioGroup 
      android:id="@+id/RadioGroup1" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" > 

      <RadioButton 
       android:id="@+id/inc_random" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginLeft="6dp" 
       android:onClick="onRadioButtonClicked" 
       android:text="Разовый" /> 

      <RadioButton 
       android:id="@+id/inc_const" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginLeft="9dp" 
       android:checked="true" 
       android:onClick="onRadioButtonClicked" 
       android:text="Постоянный" /> 

     </RadioGroup> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 

     <TextView 
     android:id="@+id/DataPick1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="top" 
     android:layout_marginLeft="16dp" 
     android:text="Начало периода:" 
     android:enabled="false"/> 

    <EditText 
    android:id="@+id/inc_day" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="DD" 
    android:enabled="false" > 
    </EditText> 

    <EditText 
    android:id="@+id/inc_month" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="MM" 
    android:enabled="false"> 
    </EditText> 

    <EditText 
    android:id="@+id/inc_year" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:enabled="false" 
    android:text="YYYY" > 
    </EditText> 
    </LinearLayout> 

<EditText 
    android:id="@+id/inc_period" 
    android:layout_width="wrap_content" 
    android:enabled="false" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="4dp" 
    android:layout_marginLeft="4dp" 
    android:layout_marginRight="4dp" 
    android:text="Каждые Х дней" > 

     </EditText> 
</LinearLayout> 

건물 :

protected Dialog onCreateDialog(int id) { 
     AlertDialog.Builder adb = new AlertDialog.Builder(this); 
     adb.setTitle("Добавить доход"); 
     view = (LinearLayout) getLayoutInflater() 
      .inflate(R.layout.inc_dialog, null); 
     // устанавливаем ее, как содержимое тела диалога 
     adb.setView(view) .setPositiveButton("Cancel", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int id) { 
       dialog.cancel(); 
      } 
     }) .setNegativeButton("OK", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       Toast.makeText(getApplicationContext(),"Добавлено", Toast.LENGTH_SHORT).show(); 
      } 
     }); ; 

      return adb.create(); 
     } 
이 전체를 필요한 경우 내가 활동

public void onRadioButtonClicked(){ 

      switch(view.getId()) { 
      case R.id.inc_const: 
       findViewById(R.id.DataPick1).setEnabled(true); 
       break; 
      case R.id.inc_random: 
       findViewById(R.id.DataPick1).setEnabled(false); 
       break; 
     } 
    }; 

에 전화

온 클릭 기능 활동 코드. Income.java

package com.example.pocketbooker; 

import android.app.Activity; 
import android.app.AlertDialog; 
import android.app.Dialog; 
import android.content.DialogInterface; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.View.OnClickListener; 
import android.widget.LinearLayout; 
import android.widget.TextView; 
import android.widget.Toast; 

public class Income extends Activity{ 

    LinearLayout view; 


    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setTitle("Доходы"); 
     setContentView(R.layout.income_const); 

    } 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu items for use in the action bar 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.inoutgo, menu); 
     return super.onCreateOptionsMenu(menu); 


    } 
    protected Dialog onCreateDialog(int id) { 
     AlertDialog.Builder adb = new AlertDialog.Builder(this); 
     adb.setTitle("Добавить доход"); 
     view = (LinearLayout) getLayoutInflater() 
      .inflate(R.layout.inc_dialog, null); 
     // устанавливаем ее, как содержимое тела диалога 
     adb.setView(view) .setPositiveButton("Cancel", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int id) { 
       dialog.cancel(); 
      } 
     }) .setNegativeButton("OK", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       Toast.makeText(getApplicationContext(),"Добавлено", Toast.LENGTH_SHORT).show(); 
      } 
     }); ; 

      return adb.create(); 
     } 

    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle presses on the action bar items 
     switch (item.getItemId()) { 
      case R.id.plus: 
       showDialog(1); 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 

    public void onRadioButtonClicked(){ 

      switch(view.getId()) { 
      case R.id.inc_const: 
       findViewById(R.id.DataPick1).setEnabled(true); 
       break; 
      case R.id.inc_random: 
       findViewById(R.id.DataPick1).setEnabled(false); 
       break; 
     } 
    }; 

    } 

그래서 나는 나의 대화를 동적으로 뷰의 속성을 변경하고 싶습니다. 어떻게해야합니까? 내 Activity 함수에서 대화 상자 뷰를 호출하려면 어떻게해야합니까? 영어로 유감스럽게 생각합니다. 저는 카자흐스탄 출신입니다. 도와주세요.

+0

Initialze 라디오 버튼을 선택한 다음 사용 여부를 확인하거나 사용하지 않도록 설정하십시오. – Raghunandan

답변

0

나는 그것을 만들었습니다.

나는 나의 대화

package com.example.pocketbooker; 

import android.annotation.SuppressLint; 
import android.app.DialogFragment; 
import android.content.DialogInterface; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.EditText; 

@SuppressLint("NewApi") 
public class Dialog_inc extends DialogFragment implements OnClickListener { 
    EditText POLE; 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    getDialog().setTitle("Добавить Доход"); 

    View v = inflater.inflate(R.layout.inc_dialog, null); 
    v.findViewById(R.id.btnYes).setOnClickListener(this); 
    v.findViewById(R.id.btnNo).setOnClickListener(this); 
    v.findViewById(R.id.inc_const).setOnClickListener(this); 
    v.findViewById(R.id.inc_random).setOnClickListener(this); 
    POLE=(EditText) v.findViewById(R.id.inc_year); 
    return v; 

    } 

    public void onClick(View v) { 

     switch(v.getId()) 
     {case R.id.inc_const: 
      POLE.setEnabled(true); 
      break; 
     case R.id.inc_random: 
      POLE.setEnabled(false); 

      break; 
     default: 
      dismiss();} 

    } 

    public void onDismiss(DialogInterface dialog) { 
    super.onDismiss(dialog); 

    } 

    public void onCancel(DialogInterface dialog) { 
    super.onCancel(dialog); 

    } 

} 

약간이 내 레이아웃을 변경, 추가 2 개 버튼에

만든 별도의 클래스 Dialog_inc.java DialogFragment

을 사용했다. inc_dialog.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <EditText 
     android:id="@+id/inc_name" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="4dp" 
     android:layout_marginLeft="4dp" 
     android:layout_marginRight="4dp" 
     android:layout_marginTop="16dp" 
     android:hint="Название дохода" 
     android:inputType="textEmailAddress" /> 

    <EditText 
     android:id="@+id/inc_value" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="16dp" 
     android:layout_marginLeft="4dp" 
     android:layout_marginRight="4dp" 
     android:layout_marginTop="4dp" 
     android:hint="Сумма дохода" 
     android:inputType="text" /> 

    <TextView 
     android:id="@+id/tvChkBoxIncType" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="6dp" 
     android:layout_marginLeft="16dp" 
     android:layout_marginRight="4dp" 
     android:layout_marginTop="4dp" 
     android:text="Тип дохода:" /> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 

     <RadioGroup 
      android:id="@+id/RadioGroup1" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" > 

      <RadioButton 
       android:id="@+id/inc_random" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginLeft="6dp" 
       android:onClick="OnRadio" 
       android:text="Разовый" /> 

      <RadioButton 
       android:id="@+id/inc_const" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginLeft="9dp" 
       android:onClick="OnRadio" 
       android:checked="true" 
       android:text="Постоянный" /> 

     </RadioGroup> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 

     <TextView 
      android:id="@+id/DataPick1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="top" 
      android:layout_marginLeft="16dp" 
      android:text="Начало периода:" 
      /> 
     <EditText 
    android:id="@+id/inc_day" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="DD" > 

     </EditText><EditText 
    android:id="@+id/inc_month" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="MM" 

    > 

     </EditText><EditText 
      android:id="@+id/inc_year" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="YYYY" > 

     </EditText> 
    </LinearLayout> 

<EditText 
    android:id="@+id/inc_period" 
    android:layout_width="wrap_content" 

    android:layout_height="wrap_content" 
    android:layout_marginBottom="4dp" 
    android:layout_marginLeft="4dp" 
    android:layout_marginRight="4dp" 
    android:onClick="onRadioButtonClicked" 
    android:text="Каждые Х дней" > 

     </EditText> 
     <LinearLayout 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"> 
<Button 
android:id="@+id/btnYes" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_margin="10dp" 
android:text="yes"> 
</Button> 
<Button 
android:id="@+id/btnNo" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_margin="10dp" 
android:text="no"> 
</Button> 

</LinearLayout> 
</LinearLayout> 

이 대화 상자를 이렇게 부릅니다. Income.class

package com.example.pocketbooker; 

import android.annotation.SuppressLint; 
import android.app.Activity; 
import android.app.DialogFragment; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.widget.LinearLayout; 

public class Income extends Activity{ 

    LinearLayout view; 
    DialogFragment dlg1; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setTitle("Доходы"); 
     setContentView(R.layout.income_const); 
     dlg1 = new Dialog_inc(); 
    } 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu items for use in the action bar 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.inoutgo, menu); 
     return super.onCreateOptionsMenu(menu); 
      } 

    @SuppressLint("NewApi") 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle presses on the action bar items 
     switch (item.getItemId()) { 
      case R.id.plus: 
       dlg1.show(getFragmentManager(), "dlg1"); 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 

} 

물론 지금은 아름다운 코드가 아닙니다. 그러나 그것이 누군가를 도울 수 있기를 바랍니다. 응답 해 주신 모든 분께

1

DataPicker가 대화 상자 레이아웃 안에 있으므로 onCreateDialog 메서드에서 RadioButton id를 선택한 사용자를 전달해야합니다. 로 시도 : 그것은 XML 레이아웃에서 언급 온 클릭 방법에 대한 필요가 있기 때문에 모든

protected Dialog onCreateDialog(int id) { 
     RadioGroup radioGroup = (RadioGroup) findViewById(R.id.RadioGroup1); 
      AlertDialog.Builder adb = new AlertDialog.Builder(this); 
      adb.setTitle("Добавить доход"); 
      view = (LinearLayout) getLayoutInflater() 
       .inflate(R.layout.inc_dialog, null); 
    int radioBtnid = radioGroup.getCheckedRadioButtonId(); 

    // get DatePicker 
    DatePicker datepick1=(DatePicker)view.findViewById(R.id.DataPick1); 
    if(radioBtnid==R.id.inc_const){ 
     //Enable DataPick1 
     datepick1.setEnabled(true); 
    }else if(radioBtnid==R.id.inc_random){ 
     // Disable DataPick1 
     datepick1.setEnabled(false); 
    } 

//your code ... 
} 
+0

도움이되지 않았습니다. 그것은 단지 1 번만 실행되고 아무 것도 일어나지 않습니다. – anindis

1

첫째는 onRadioButtonClicked() 메소드에 인수로보기 전달합니다. 뷰를 유일한 매개 변수로 정의하십시오 (클릭 한 뷰가됩니다)

또한 isChecked() 메소드를 호출하여 전달 된 뷰가 선택되었는지 여부를 확인하십시오. 최종 코드는 다음과 같습니다.

public void onRadioButtonClicked(View view) { 
// Is the button now checked? 
boolean checked = ((RadioButton) view).isChecked(); 

// Check which radio button was clicked 
switch(view.getId()) { 
    case R.id.inc_const: 
     if (checked) 
      // Do the necessary things here if inc_const is selected 
      findViewById(R.id.DataPick1).setEnabled(true); 
     break; 
    case R.id.inc_random: 
     if (checked) 
      // Put the code necessary if the random is checked 
      findViewById(R.id.DataPick1).setEnabled(false); 
     break; 
    } 
} 

이 정보가 도움이되는지 알려주세요.

+0

저는 여기에 새로운 사람입니다. 그래서 사람들이 여기서 대답하는 방법이되기를 바랍니다. 불행히도 도움이되지 않았습니다. (( – anindis

관련 문제