我已经阅读了很多这方面的帖子,但我找不到任何适用于这种情况的帖子.
我有一个时间选择器对话框,我已将整数值放在一个字符串中,我需要将此字符串返回到主活动.
然后,此字符串值将用于设置按钮的文本.
如果有人可以帮助我,我将非常感激.
谢谢
对话片段
public class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current time as the default values for the picker
final Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
// Create a new instance of TimePickerDialog and return it
return new TimePickerDialog(getActivity(), this, hour, minute, DateFormat.is24HourFormat(getActivity()));
}
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
// Do something with the time chosen by …Run Code Online (Sandbox Code Playgroud) 我想让我DialogFragment回复一个在editQuantity被解雇时输入的值.
但我没有办法让它发挥作用.我可以通过传递值来执行此操作,intent但这会破坏当前活动的进度.
除了通过之外还有什么办法intent可以让我回报价值吗?
package com.example.myprojectname;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.text.InputType;
import android.util.Log;
import android.widget.EditText;
public class QuantityDialogFragment extends DialogFragment implements OnClickListener {
private EditText editQuantity;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
editQuantity = new EditText(getActivity());
editQuantity.setInputType(InputType.TYPE_CLASS_NUMBER);
return new AlertDialog.Builder(getActivity())
.setTitle(R.string.app_name)
.setMessage("Please Enter Quantity")
.setPositiveButton("OK", this)
.setNegativeButton("CANCEL", null)
.setView(editQuantity)
.create();
}
@Override
public void onClick(DialogInterface dialog, int position) {
String value = …Run Code Online (Sandbox Code Playgroud) 我正在迁移我正在使用的对话框,Activity.showDialog(DIALOG_ID);以便DialogFragment在android参考中讨论使用该 系统.
在使用回调将一些事件传递回打开对话框的活动/片段时,我的开发过程中出现了一个问题:
这是一个简单对话框的示例代码:
public class DialogTest extends DialogFragment {
public interface DialogTestListener {
public void onDialogPositiveClick(DialogFragment dialog);
}
// Use this instance of the interface to deliver action events
static DialogTestListener mListener;
public static DialogTest newInstance(Activity activity, int titleId, int messageId) {
udateListener(activity);
DialogTest frag = new DialogTest();
Bundle args = new Bundle();
args.putInt("titleId", titleId);
args.putInt("messageId", messageId);
frag.setArguments(args);
return frag;
}
public static void udateListener(Activity activity) {
try {
// Instantiate the NoticeDialogListener …Run Code Online (Sandbox Code Playgroud) android dialog callback orientation-changes android-dialogfragment
我想知道我是否可以冻结当前的Activity,而我等待另一个活动或对话(任何可以)完成.
我知道我可以为结果启动一个活动,并在那里处理它们,但是startActivityForResult()之后的代码仍然会被执行
这是我想做的事情:
PopupDialog dialog = new PopupDialog(this,android.R.style.Theme_Black_NoTitleBar);
dialog.show();
// wait here, and continue the code after the dialog has finishes
int result = getResultFromDialogSomehow();
if (result == 1){
//do something
}else{
//do something else
}
Run Code Online (Sandbox Code Playgroud)
我知道这听起来很奇怪,但是如果有人能告诉我如何实现这样的功能,我真的很感激.
我知道的一种方式是通过activity.We可以从片段发送数据到活动和活动到片段有没有其他方式.
setTargetFragment()在 Java 中已弃用,我不明白它的正确替代品,因为 android 文档使用它并且已经过时。我相信这FragmentManager是它的正确替代品。我setTargetFragment在我的设置首选项中使用已弃用的功能来创建多个首选项屏幕。为此,我最初遵循了此处的指南,该指南在setTargetFragment示例中使用起来很混乱。下面是我的代码:
build.gradle (Module: app)
...
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'androidx.preference:preference:1.1.1'
...
Run Code Online (Sandbox Code Playgroud)
MainActivity.kt
class MainActivity : AppCompatActivity() {
private lateinit var settingsButton: ImageButton
override fun onCreate(savedInstanceState: Bundle?) {
...
settingsButton = findViewById(R.id.settingsButtonMain)
settingsButton.setOnClickListener {
settingsClicked()
}
...
}
private fun settingsClicked() {
val settingsIntent = Intent(this, SettingsActivity::class.java)
startActivity(settingsIntent)
}
}
Run Code Online (Sandbox Code Playgroud)
SettingsActivity.kt
class SettingsActivity : AppCompatActivity(), PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
override fun onCreate(savedInstanceState: Bundle?) {
...
supportFragmentManager.beginTransaction().replace(R.id.settings, SettingsFragment(this)).commit()
supportFragmentManager.addOnBackStackChangedListener …Run Code Online (Sandbox Code Playgroud) 我试图在点击侦听器中使用底部工作表,但我在这一行收到错误。
BottomSheetFragment.show(getSupportFragmentManager())
无法解析方法“show(?, java.lang.String)”无法解析方法“getSupportFragmentManager()”
我想在片段类中使用底部工作表。
SubCategoryDetailFragment.java
public class SubCategoryDetailFragment extends Fragment {
TextView txtv_sort;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view= inflater.inflate(R.layout.fragment_sub_category_detail, container, false);
toolbar = ((MainActivity) getActivity()).findViewById(R.id.toolbar);
toggle = ((MainActivity) getActivity()).getToggle();
shimmerContainer = view.findViewById(R.id.shimmer_view_container);
recyclerView_subcatDetail = view.findViewById(R.id.recycler_view_subCategoryDetail);
txtv_sort = view.findViewById(R.id.txtv_sort);
toggle.setDrawerIndicatorEnabled(false);
toggle.setHomeAsUpIndicator(R.drawable.back);
toggle.setToolbarNavigationClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getActivity().onBackPressed();
}
});
txtv_sort.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
BottomSheetFragment bottomSheetFragment = new BottomSheetFragment();
bottomSheetFragment.show(getSupportFragmentManager(), bottomSheetFragment.getTag());
}
});
return view; …Run Code Online (Sandbox Code Playgroud)