我创建了自定义对话框,我想在取消按钮点击时将其关闭。我在google上搜索过,大多数人都在使用 Dialog 或 AlertDialog ,但我没有使用类似的东西。这是我的TextDialogActivity
,它是在我的应用中按下按钮时加载的。从MainActivity
我只是将另一个活动渲染为自定义对话框。当我单击对话框上的Save
按钮时,我想访问父活动中的数据,该活动存储在子活动的变量textData
中。
public class TextDialogActivity extends AppCompatActivity {
TabHost tabHost;
private static final int FILE_SELECT_CODE = 0;
private String textData;
private Button browse;
private Button cancel_button1;
private Button cancel_button2;
private TextView text_preview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.text_dialog_layout);
browse = findViewById(R.id.browse_file_button);
text_preview = findViewById(R.id.text_preview);
cancel_button1 = findViewById(R.id.cancel_button);
cancel_button2 = findViewById(R.id.cancel_button2);
tabHost = findViewById(R.id.tabHost);
tabHost.setup();
TabHost.TabSpec spec=tabHost.newTabSpec("tag1");
spec.setContent(R.id.encode_dialog_text_tab);
spec.setIndicator("Edit Text");
tabHost.addTab(spec);
spec=tabHost.newTabSpec("tag2");
spec.setContent(R.id.encode_dialog_browse_tab);
spec.setIndicator("Browse");
tabHost.addTab(spec);
browse.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showFileChooser();
}
});
cancel_button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// close dialog
}
});
cancel_button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// close dialog
}
});
}
}
我在{strong> AndroidManifest.xml 中添加了@style/Theme.AppCompat.Dialog
来进行对话。
<activity
android:name=".activity.TextDialogActivity"
android:theme="@style/Theme.AppCompat.Dialog"
android:label="Secret Message">
</activity>
这是截图。
答案 0 :(得分:1)
您应该将此视为任何其他活动。只需使用intent将数据从弹出活动发送到父活动。
您应该在弹出窗口中使用data
Intent
中的onActivityResult(int requestCode, int resultCode, Intent data)
saveButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
intent.putStringArrayListExtra("popup_data", data);
setResult(RESULT_OK, intent);
finish();
}
});
:
if (resultCode == RESULT_OK) {
ArrayList<String> popup_data=
data.getExtras().getStringArrayList("popup_data");
}
在父母:
writeMsg()
答案 1 :(得分:0)
如上所述,活动并不是最好的。
但是,只需将对话框作为结果的活动开始。
然后当用户按下按钮返回结果并完成活动时。
然后在主Activity中,您将获得onActivityResult
启动活动(在MainActivity中)
Intent intent = new Intent(this, SecondActivity.class); startActivityForResult(intent, REQUEST_CODE);
设置结果(在对话框中)
ExampleClickAdapter clickAdapter = new ExampleClickAdapter(yourObjects); clickAdapter.setOnEntryClickListener(new ExampleClickAdapter.OnEntryClickListener() { @Override public void onEntryClick(View view, int position) { Intent intent = new Intent(); intent.putExtra("pos", position); setResult(Activity.RESULT_OK, intent); finish(); } });
接收结果(在MainActivity中)
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // Check which request we're responding to if (requestCode == PICK_CONTACT_REQUEST) { // Make sure the request was successful if (resultCode == RESULT_OK) { // The user picked a contact. // The Intent's data Uri identifies which contact was selected. // Do something with the contact here (bigger example below) } } }
答案 2 :(得分:-1)
我的自定义对话框/弹出窗口是活动本身。我没有使用Dialog或AlertDialog。要在“取消”按钮上单击关闭此对话框,这就是我所做的:
cancel_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish(); // Call this method to close the dialog
}
});
为了访问从子活动(TextDialogActivity
)到父(MainActivity
)活动的数据,我做了与答案中建议的@Kemo相同的操作。这是代码:
// From Parent activity(MainActivity) opening popup on button click
popUpButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(getContext(), TextDialogActivity.class);
startActivityForResult(intent, TEXTFILE);
}
});
// From Child activity(TextDialogActivity) sending data to parent activity
save_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(!secretText.isEmpty()) {
Intent intent = new Intent();
intent.putExtra("popup_data", secretText);
setResult(RESULT_OK, intent);
finish();
}
}
});
现在我希望子活动的结果为父活动,我在onActivityResult
方法中执行此操作:
// In parent activity get data on onActivityResult
if (requestCode == TEXTFILE && resultCode == getActivity().RESULT_OK){
secretText = data.getExtras().getString("popup_data", "");
}