使用DialogFragment创建按钮

时间:2018-01-30 10:01:06

标签: java android android-studio-3.0

每次按下“开始目标”按钮时,我都需要使用dialogfragment来创建按钮。 Dialogfragment包含2个用于目标名称和目标金额的editTexts。如何获取2个editTexts的值并将其显示在按钮上?

我在主活动中使用了2个文本字段来测试对话框是否可以将2个编辑文本的值发送到主要活动的文本字段。

这是activity_main

的xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.eugene.myapplication.MainActivity">

<TextView
    android:id="@+id/textview_GoalName"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentStart="true"
    android:layout_centerVertical="true"
    android:gravity="center_horizontal"
    android:text="Here will be your Goal Name"
    android:textSize="30sp" />

<TextView
    android:id="@+id/textview_GoalAmount"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentStart="true"
    android:layout_below="@+id/textview_GoalName"
    android:gravity="center_horizontal"
    android:text="Here will be your Goal Amount"
    android:textSize="30sp" />

<Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/textview_GoalAmount"
    android:layout_centerHorizontal="true"
    android:text="Create a Goal!" />

</RelativeLayout>

这是dialogfragment的

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp">


<EditText
    android:id="@+id/edit_goalName"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="Goal Name"/>

<EditText
    android:id="@+id/edit_goalAmt"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentStart="true"
    android:layout_below="@+id/edit_goalName"
    android:hint="Goal Amount"
    android:inputType="number" />

这是MainActivity的java代码

public class MainActivity extends AppCompatActivity implements 
ExampleDialog.ExampleDialogListener {

private TextView textViewGoalName;
private TextView textViewGoalAmt;
private Button button;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    textViewGoalName = findViewById(R.id.textview_GoalName);
    textViewGoalAmt = findViewById(R.id.textview_GoalAmount);
    button = findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            openDialog();
        }
    });
}


public void openDialog(){
    ExampleDialog exampleDialog = new ExampleDialog();
    exampleDialog.show(getSupportFragmentManager(), "example dialog");
}

@Override
public void applyTexts(String username, String password) {
    textViewGoalName.setText(username);
    textViewGoalAmt.setText(password);
  }
}

这是dialogframgent的

的java代码
public class ExampleDialog extends AppCompatDialogFragment {

private EditText editTextGoalName;
private EditText editTextGoalAmt;
private ExampleDialogListener listener;

@Override

public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

    LayoutInflater inflater =  getActivity().getLayoutInflater();
    View view = inflater.inflate(R.layout.layout_dialog,null);

    builder.setView(view)
            .setTitle("Create Goal")
            .setNegativeButton("Maybe next time..", new 
             DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i){

                }
            })
            .setPositiveButton("Start!", new 
             DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i){
                    String goalname = editTextGoalName.getText().toString();
                    String goalamt = editTextGoalAmt.getText().toString();
                    String message = "Fields Required";

                    if (goalname == "" && goalamt == ""){
                        Toast.makeText(getActivity(),message, 
                        Toast.LENGTH_SHORT).show();
                    }
                    listener.applyTexts(goalname, goalamt);
                }
            });

    editTextGoalName = view.findViewById(R.id.edit_goalName);
    editTextGoalAmt = view.findViewById(R.id.edit_goalAmt);

    return builder.create();
}

@Override
public void onAttach(Context context) {
    super.onAttach(context);

    try {
        listener = (ExampleDialogListener) context;
    } catch (ClassCastException e) {
        throw new ClassCastException(context.toString() + "Must implement 
        ExampleDialogListener");
    }
}

public interface ExampleDialogListener{
    void applyTexts(String username, String password);
    }
}

1 个答案:

答案 0 :(得分:0)

我建议使用界面。 该接口可用于与活动和片段进行通信。

您可以在以下链接中查看: https://developer.android.com/guide/components/fragments.html?hl=ko#CommunicatingWithActivity

定义界面。

并在您的活动中实施。

定义&#34;界面&#34; DialogFragment中的成员变量。

成员变量将在你的&#34; onAttach()&#34;中初始化。回调方法。

您可以在上方链接中找到详细信息代码示例。