我将尽力以最少的可重复代码来询问我的问题。
我想单击TITLE按钮时,弹出一个DialogFragment,要求用户输入情绪板的标题。用户输入标题。当单击PostiveButton“完成”时,用户的标题设置在情绪面板的左上方。
请!提出问题,因为我不太了解对话框的设置,也不知道如何将对话框设置得尽可能小。
这里是我的main_layout的图片。每个元素都有一个“ @ + id /”。
这是我的MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//----- Bottom Constraint Layout & Frames -----
btnThemeListener();
//Top Left Frame: Mood Board Title
topLeftFrame = findViewById(R.id.topLeftFrame);
tvUserTitle = findViewById(R.id.tvTopLeftFrame);
FragmentTransaction fragmentTransaction =
getSupportFragmentManager().beginTransaction();
TitleEditorDialog titleEditorDialog = new TitleEditorDialog();
fragmentTransaction.add(tvUserTitle.getId(), titleEditorDialog);
fragmentTransaction.commit();
}
private View.OnClickListener editTitleClickedListener = new
View.OnClickListener() {
@Override
public void onClick(View view) {
FragmentManager fragmentManager = getSupportFragmentManager();
TitleEditorDialog titleEditorDialog = new TitleEditorDialog();
//This doesn't seem right, wouldn't this cause an infinity loop
titleEditorDialog.setTargetFragment(titleEditorDialog,
TITLE_EDITOR_REQUEST);
titleEditorDialog.show(fragmentManager, "TITLE_DIALOG_EDITOR");
}
};
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable
Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==RESULT_OK && requestCode==THEME_PICKER_REQUEST){
if(data != null && data.getExtras() != null){
Bundle themeBundle = data.getExtras();
int baseColor = themeBundle.getInt("BASE_CODE");
moodBoard = findViewById(R.id.moodBoard);
moodBoard.setBackgroundColor(baseColor);
}else if(resultCode == TITLE_EDITOR_REQUEST && requestCode == RESULT_OK){
tvUserTitle.setText(data.getStringExtra(TitleEditorDialog.EXTRA_TITLE));
}
}
}
这是我的TitleEditorDialog类
public static final String EXTRA_TITLE = "?";
private EditText titleText;
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
Context context = getActivity();
LinearLayout linearLayout = new LinearLayout(context);
linearLayout.setOrientation(LinearLayout.VERTICAL);
linearLayout.setBackgroundColor(Color.parseColor("#868b8e"));
titleText = new EditText(context);
titleText.setHint("Enter Title Here");
linearLayout.addView(titleText);
return new AlertDialog.Builder(context)
.setTitle("Mood Board Title Editor")
.setView(linearLayout)
.setPositiveButton("Done", doneClickedListener)
.create();
}
private void sendResult(int resultCode){
if(getTargetFragment() == null){
//Test: if there is a target before sending data to it
}else {
Intent intent = new Intent();
intent.putExtra("TITLE_CODE", titleText.getText().toString());
getTargetFragment().onActivityResult(getTargetRequestCode(), resultCode, intent);
}
}
private DialogInterface.OnClickListener doneClickedListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
sendResult(Activity.RESULT_OK);
}
};
final EditText edittext = new EditText(MainActivity.this);
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setMessage("Input Title")
.setView(edittext)
.setCancelable(false)
.setPositiveButton("Confirm", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
YourCustomDialog.your_title_textviewMoodboard.setText(edittext.getText().toString());
}
})
.setNegativeButton("Back", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
});
AlertDialog alert = builder.create();
alert.show();
在您的自定义对话框中。全局声明您的textview静态
public static TextView your_title_textviewMoodboard;