2016-12-05 4 views
1

У меня есть DialogFragment с двумя кнопками и двумя текстовыми полями.Диалог Фрагмент передачи данных активности

Я только хочу, чтобы при вводе данных в обоих текстовых полях и нажатии кнопки «ОК» он может соответствовать данным обоих полей и сохранять результат на String. Toast msg работает правильно, но как я могу получить данные из текстового поля фрагмента? Вот мой код Fragment

public class chngpswd extends DialogFragment implements View.OnClickListener { 

    Button ok,cancel; 

    @Override 
    public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){ 
     View v=inflater.inflate(R.layout.activity_chngpswd,null); 

     ok=(Button)v.findViewById(R.id.ok); 
     cancel=(Button)v.findViewById(R.id.cancel); 
     ok.setOnClickListener(this); 
     cancel.setOnClickListener(this); 
     setCancelable(false); 
     return v; 
    } 

    @Override 
    public void onClick(View v) { 
     if(v.getId()==R.id.ok) 
     { 
      dismiss(); 
      Toast.makeText(getActivity(),"ok", Toast.LENGTH_LONG).show(); 
     } 
     else { 

      dismiss(); 
      Toast.makeText(getActivity(),"cancelled", Toast.LENGTH_LONG).show(); 
     } 
    } 
} 

Код для XML используется в Fragment

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    tools:context="com.example.adnaninayat.myapplication.chngpswd" 
    android:weightSum="1"> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Cancel" 
     android:id="@+id/cancel" 
     android:layout_marginTop="48dp" 
     android:layout_below="@+id/pass" 
     android:layout_centerHorizontal="true" /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="OK" 
     android:id="@+id/ok" 
     android:layout_alignTop="@+id/cancel" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" /> 

    <EditText 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:inputType="numberPassword" 
     android:ems="10" 
     android:id="@+id/pass" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" 
     android:hint="Enter New Password" 
     android:maxLength="4" /> 

    <EditText 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:inputType="numberPassword" 
     android:ems="10" 
     android:id="@+id/cpass" 
     android:layout_above="@+id/ok" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" 
     android:hint="Confirm Password" 
     android:maxLength="4" /> 

</RelativeLayout> 
+0

Вы можете объяснить немного больше? –

ответ

1

Вы должны сохранить ссылки на текстовые поля в вашем onCreateView() (как вы делаете с кнопками) и использовать их, чтобы получить данные поля:

Button ok, cancel; 
EditText pass, cpass; 

public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){ 
    View v=inflater.inflate(R.layout.activity_chngpswd,null); 

    ok=(Button)v.findViewById(R.id.ok); 
    cancel=(Button)v.findViewById(R.id.cancel); 

    pass = (EditText)v.findViewById(R.id.pass); 
    cpass = (EditText)v.findViewById(R.id.cpass); 

    ok.setOnClickListener(this); 
    cancel.setOnClickListener(this); 
    setCancelable(false); 
    return v; 
} 

@Override 
public void onClick(View v) { 
    if(v.getId()==R.id.ok) 
    { 
     dismiss(); 
     String passData = pass.getText().toString(); 
     Toast.makeText(getActivity(),"ok: " + passData, Toast.LENGTH_LONG).show(); 
    } 
    else { 

     dismiss(); 
     Toast.makeText(getActivity(),"cancelled", Toast.LENGTH_LONG).show(); 
    } 
} 
+0

Спасибо большое друг ... –

1

первой инициализации объектов EditText и

EditText et1 = (EditText)v.findViewById(R.id.pass); 
EditText et1 = (EditText)v.findViewById(R.id.cpass); 

и использовать следующий код, чтобы получить текст

String firstField = et1.getText().toString(); 

Надеюсь, это поможет!

0

Добавить этот интерфейс к вашему Фрагмент

public interface OnButtonClicked { 
    public void onOk(String passData); 
    public void onCancel(); 
} 

На щелчку кнопки

if(v.getId()==R.id.ok){ 
    dismiss(); 
try { 
    ((OnNextClicked) context).onOk(passValue); 
    } catch (ClassCastException cce) {cce.printStackTrace();} 
}else { 
    dismiss(); 
    Toast.makeText(getActivity(),"cancelled", Toast.LENGTH_LONG).show(); 
} 

реализует YourFragment.OnButtonClicked это в вашей деятельности

Вы получите значение в

@Override onOk(String passedValue){ //To do here }

0

вы можете добиться этого с помощью интерфейса, отправив свои данные из фрагмента в вашей деятельности, ниже я редактировал свой полный код и оборотный штраф. ... Вот код примера

Your Main Activity 

    public class MainActivity extends Activity implements SetName{ 
     Button showDialog; 
     TextView showText; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      showDialog = (Button)findViewById(R.id.button1); 
      showText = (TextView)findViewById(R.id.textView2); 
      showDialog.setOnClickListener(new View.OnClickListener() 
      { 
       @Override 
       public void onClick(View v) { 
        showMyAlert(v); 
       } 
      }); 
     } 

     public void showMyAlert(View view) { 
      MyAlert myAlert = new MyAlert(); 
      myAlert.show(getFragmentManager(), "My New Alert"); 
     } 

     public void setMyNameStr(String myNameStr) { 

     } 

     @Override 
     public void setMyName(String string) { 
      // TODO Auto-generated method stub 

      showText.setText(string); 
     } 
    } 

Your Dialog 

public class MyAlert extends DialogFragment { 

    MainActivity callBackActivity; 
    Button ok, cancel; 
    EditText pass, cpass; 
    SetName setname; 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 

     callBackActivity = new MainActivity(); 

     ok=(Button)v.findViewById(R.id.ok); 
     cancel=(Button)v.findViewById(R.id.cancel); 

     pass = (EditText)v.findViewById(R.id.pass); 
     cpass = (EditText)v.findViewById(R.id.cpass); 

     getEditText.setInputType(InputType.TYPE_CLASS_TEXT); 
     AlertDialog.Builder builder = new  
     AlertDialog.Builder(getActivity()); 
     builder.setTitle("Get UserName :"); 
     builder.setMessage("Enter Your Name :"); 
     builder.setPositiveButton("Ok", this); 
     builder.setNegativeButton("Cancel", null); 
     builder.setView(getEditText); 
     return builder.create(); 
    } 


    @Override 
    public void onAttach(Activity a) { 
     super.onAttach(a); 
     setname = (SetName) a; 
    } 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     String value = pass.getText().toString(); 
     Log.d("Name : ", value); 
     setname .setMyName(value); 
     dialog.dismiss(); 
    } 

    ok.setOnClickListener(this); 
    cancel.setOnClickListener(this); 
} 

@Override 
public void onClick(View v) { 
if(v.getId()==R.id.ok) 
{ 
    dismiss(); 
    String passData = pass.getText().toString(); 
    Toast.makeText(getActivity(),"ok: " + passData, Toast.LENGTH_LONG).show(); 
} 
else { 

    dismiss(); 
    Toast.makeText(getActivity(),"cancelled", Toast.LENGTH_LONG).show(); 
    } 
} 

Create a Interface 

public interface SetName { 

    void setMyName(String string); 

} 
Смежные вопросы