每次按下“开始目标”按钮时,我都需要使用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的 这是MainActivity的java代码 这是dialogframgent的<?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" />
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);
}
}
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);
}
}
答案 0 :(得分:0)
我建议使用界面。 该接口可用于与活动和片段进行通信。
您可以在以下链接中查看: https://developer.android.com/guide/components/fragments.html?hl=ko#CommunicatingWithActivity
定义界面。
并在您的活动中实施。
定义&#34;界面&#34; DialogFragment中的成员变量。
成员变量将在你的&#34; onAttach()&#34;中初始化。回调方法。
您可以在上方链接中找到详细信息代码示例。