2016-12-05 43 views
1

我有一个DialogFragment两个按钮和两个文本字段。对话框片段进行活动数据传输

我只希望当我在两个文本字段中输入数据并按下“确定”按钮时,它可以匹配两个字段的数据并将结果保存到String。吐司味精工作正常,但我怎么能从片段文本字段获取数据?这里是我的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); 

} 
相关问题