我在从 DialogFragment 调用我的 Activity 的函数时遇到问题。我的 MainActivity 中有一些公共函数,我需要调用它们来进行一些在 DialogFragment 中完成的计算。每次我尝试使用 getActivity() 调用函数时。出现“无法解决方法”的问题。
这是我在 MainActivity 中调用 DialogFragment 的方式:
FragmentManager fm = getSupportFragmentManager();
DialogWeekly dialogWeekly = new DialogWeekly();
dialogWeekly.show(getFragmentManager(), "fragment_dialogWeekly");
Run Code Online (Sandbox Code Playgroud)
这就是 DialogFragment 的样子。我在出现上述问题的地方添加了两个注释行:
public class DialogReminder extends DialogFragment implements AdapterView.OnItemSelectedListener {
//--- Static Variables -----------------------------------------------------------------------//
private static final String MY_PREFS = "my_preferences";
private static Activity activity;
private static TimePicker timePicker;
private static View dialogReminderView;
//--- Integer Variables ----------------------------------------------------------------------//
private Integer weekday;
//--- String Variables -----------------------------------------------------------------------//
private String weekdayString;
//--- Other Variables ------------------------------------------------------------------------//
private …Run Code Online (Sandbox Code Playgroud) 什么是最好的模式来做到这一点。我做了一些解决方法,但我觉得这是一个不好的模式。
我的场景。
我有主要活动
主活动.java
在此活动中,我正在使用 RecyclerView 加载 Fragment。
ListFragment.java
我还有DialogFragment和ItemAdapter
从适配器我显示 DialogFragment
完整的适配器代码
public class TypeAdapter extends RecyclerView.Adapter<CostTypeAdapter.ViewHolder> {
private static final String TAG = "TypeAdapter";
private List<CostType> mCostsType;
private Context mContext;
public CostTypeAdapter(Context context, List<CostType> coststype) {
mContext = context;
mCostsType = coststype;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
// Create a new view.
View v = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.costtype_row, viewGroup, false);
return new ViewHolder(v);
}
// BEGIN_INCLUDE(recyclerViewOnBindViewHolder)
@Override
public void onBindViewHolder(final ViewHolder viewHolder, …Run Code Online (Sandbox Code Playgroud) 我已经以微调器格式构建了一个带有日期选择器和时间选择器的视图。一切似乎都运转良好,只是我不知道如何将分钟设置为 5 分钟间隔?
我已经看到了如何使用 DialogFragment 执行此操作的示例,并使用 DialogFragments 通过日期选择器或时间选择器启动单独的活动,但我正在尝试使用两者创建一个活动。
我需要修改当前的代码以更改分钟间隔,或者在我的代码中合并一个 DialogFragment,该代码与嵌入在我的视图中的时间选择器一起使用。
我找不到任何有关如何执行任一操作的示例。任何建议,将不胜感激。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DatePicker simpleDatePicker = (DatePicker)findViewById(R.id.date_picker); // initiate a date picker
//Above API 26
// ????
simpleDatePicker.setOnDateChangedListener(new DatePicker.OnDateChangedListener() {
@Override
public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
// Do something
}
});
TimePicker simpleTimePicker = (TimePicker)findViewById(R.id.time_picker); // initiate a time picker
simpleTimePicker.setIs24HourView(true);// set to 24 hour
simpleTimePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
@Override
public void onTimeChanged(TimePicker …Run Code Online (Sandbox Code Playgroud) 所以在制作一个dialogfragment简单的"有用户选择"弹出窗口之后,我加载它并在布局中看到一些奇怪的额外空白,我不确定是什么导致它并且我一直在困扰我的大脑试图解决它.我稍微修改了xml以更好地显示行为,唯一的区别是我已将3个垂直部分的宽度从"match_parent"更改为"wrap_content",因此我可以使用边框来显示空白的实际大小.这是一张显示问题的图片:

这是我的xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/pictureSourceMainTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/tvborder"
android:gravity="center"
android:text="Where would you like to choose\nyour image from?"
android:textAppearance="?android:attr/textAppearanceLarge" />
<LinearLayout
android:id="@+id/pictureSourceIVLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/tvborder"
android:weightSum="3" >
<ImageView
android:id="@+id/pictureSourceCancelIV"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/ic_launcher" />
<ImageView
android:id="@+id/pictureSourceGalleryIV"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/ic_launcher" />
<ImageView
android:id="@+id/pictureSourceCameraIV"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/ic_launcher" />
</LinearLayout>
<LinearLayout
android:id="@+id/pictureSourceTVLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:weightSum="3" >
<TextView
android:id="@+id/pictureSourceCancelTV"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/tvborder"
android:gravity="center"
android:text="Cancel" />
<TextView
android:id="@+id/pictureSourceGalleryTV"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:background="@drawable/tvborder" …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个对话框,在用户注销之前向用户显示倒计时。超时是从另一个活动设置的。
我写了以下代码:
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.DialogInterface;
import android.content.res.Resources;
import android.os.Bundle;
public class SessionInactivityDialog extends DialogFragment {
public void setInactivityTimeout(long timeout) {
Resources res = getActivity().getResources();
String text = String.format(res.getString(R.string.iminent_logout_text), (timeout / 1000));
((AlertDialog)getDialog()).setMessage(text);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.iminent_logout);
builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
SessionActivity activity = (SessionActivity)getActivity();
activity.resetTimer();
}
});
return builder.create();
}
}
Run Code Online (Sandbox Code Playgroud)
使用以下几行调用该对话框:
private void showIminentLogoutDialog(long timeout) {
mInactivityDialog.show(getFragmentManager(), …Run Code Online (Sandbox Code Playgroud) android nullpointerexception android-alertdialog dialogfragment
我想在软键盘上显示DialogFragment.(我的对话框中有一些表情符号,我想在软键盘和表情符号之间切换,就像whatsapp一样)
我已将softInputMode设置为LayoutParams.SOFT_INPUT_STATE_VISIBLE,但我无法将dialogFragment放在键盘上.我试图将窗口重力设置为底部,但它不起作用
这就是它的样子

嗨,我正在为 Titanium 创建一个 Android 和 iOS 模块,它有一个 sendLog 方法,该方法将一些任意 JSON 数据发送到服务器,如果它与某些预定义的过滤器匹配,则返回一个 URL。URL 应该在带有 webview 的模式对话框中打开。
我编写了本机 iOS 和 Android 库,并将它们包装为 Titanium 模块。在 iOS 上一切正常,但在 Android 上我无法打开对话框(请参阅下面的错误堆栈跟踪)。现在有一条日志消息总是为了测试目的而触发相同的网页。在 Android 上,它只是默默地失败。
var mupets = require("be.iminds.mupets");
mupets.initialize("wappr", "http://tocker.iminds.be:3000/log/report.json", 1, 100, 3);
var esmLog = {
bar: "foo"
};
mupets.sendLog("es-test-01",JSON.stringify(esmLog));
Run Code Online (Sandbox Code Playgroud)
在这段代码之后(最多大约 10 秒后),模块应该显示一个带有以下网页的本机对话框:http : //tocker.iminds.be : 3000/es/sheets/test-01/index.html
相反,这是我一直得到的错误:
java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1411)
at android.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1429)
at android.app.BackStackRecord.commitInternal(BackStackRecord.java:687)
at android.app.BackStackRecord.commit(BackStackRecord.java:663)
at android.app.DialogFragment.show(DialogFragment.java:256)
at be.iminds.mupets_client_android.logging.plugins.OutHttp.getEsm(OutHttp.java:122)
at be.iminds.mupets_client_android.logging.plugins.OutHttp$1.success(OutHttp.java:78)
at …Run Code Online (Sandbox Code Playgroud) android module appcelerator dialogfragment appcelerator-titanium
在我的Android应用程序中,我有一个片段,用户可以从图库或相机添加图片.我已经创建了一个警告对话框并将其放在DialogFragment中.当用户选择一个选项时,我调用startActivityForResult.我的问题是,理想情况下,这个结果应该在哪里处理?(即我应该在哪里放置onActivityResult?)在DialogFragment类中,主机片段还是主机活动?有关系吗?
android fragment android-camera-intent dialogfragment onactivityresult
在我的应用程序中,我有几个对话框片段。我想要的是这个:
当一个特定的对话框片段打开并发生旋转时,我想防止该特定片段的屏幕旋转。
另外,我希望其他片段在屏幕旋转时正常运行。
这是我想停止屏幕旋转的对话框片段的java代码:
public class DialogDelete extends DialogFragment implements View.OnClickListener {
TextView textViewNaslov, textViewNote;
ImageView mBtnClose, mBtnReturn, mBtnDelete;
private RealmResults<Drop> mRealmResolts;
private Realm mRealm;
private Calendar calendar;//pravimo objekt kalendara
private BucketPickerView_Unselected mBucketNoteTimeNonSelected; //ovo nam je drugi bucket pickerview kojeg ne mozemo mjenjati
private Bundle argumetns;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NORMAL, R.style.DialogTheme); //dodajemo temu koju smo napravili preko editora
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.dialog_delete, container, …Run Code Online (Sandbox Code Playgroud)android orientation screen-orientation android-dialogfragment dialogfragment
我有一个问题想询问有关活动中片段之间的数据传递的问题。我不知道该怎么做。有人可以帮忙吗?这是我的代码。
ShareFragment.java
package com.example.user8.myapplication;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import java.text.DateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
/**
* A simple {@link Fragment} subclass.
*/
public class ShareFragment extends Fragment implements AdapterView.OnItemSelectedListener{
private …Run Code Online (Sandbox Code Playgroud) 有这个代码我只需要显示一个吐司,如果点击接受或取消,但不能理解为什么是错的如何解决?错误是在toast上getapplicationcontext()
我学习关于android的对话和吐司
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.util.Log;
import android.widget.Toast;
public class confirmacion extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState){
AlertDialog.Builder builder= new AlertDialog.Builder(getActivity());
builder.setMessage("Confirmar?").setTitle("confirmacion")
.setPositiveButton("aceptar", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.i("dialogos","aceptado");
dialog.cancel();
Toast.makeText(getApplicationContext(), "Eliminacion fallida.", Toast.LENGTH_LONG).show();
}
}).setNegativeButton("cancelar", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.i("dialogos","cancelada");
dialog.cancel();
}
});
return builder.create();
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个MainAdapter.kt类来处理RecyclerView.在其Holder类中,我使用OnLongClickListener调用函数deleteCategory(categoryId)来删除Firebase数据库中的条目.这非常有效:
class CategoryHolder(val customView: View, var category: Category? = null) : RecyclerView.ViewHolder(customView) {
private val TAG = CategoryHolder::class.java.simpleName
fun bind(category: Category) {
with(category) {
customView.textView_name?.text = category.name
customView.textView_description?.text = category.description
val categoryId = category.id
customView.setOnClickListener {
// do something
}
customView.setOnLongClickListener(
{
deleteCategory(categoryId)
true
}
)
}
}
private fun deleteCategory(categoryId: String) {
val database = FirebaseDatabase.getInstance()
val myRef = database.getReference("categories").child(categoryId)
myRef.removeValue()
Log.d(TAG, "Category with id " + categoryId + " deleted")
}
}
Run Code Online (Sandbox Code Playgroud)
但我宁愿调用DialogFragment类中的函数而不是deleteCategory(id)函数,如下所示:
// Create an instance of …Run Code Online (Sandbox Code Playgroud) 我一直在关注官方的android 开发人员文档和这个文档,以便在我的项目中使用 DialogFragment。到目前为止一切顺利,因为我必须将数据传递给 DialogFragment 以创建多选列表,所以我通过newInstance方法(传递项目)从我的 MainActivity 内部调用 DialogFragment并且我得到了正确的结果。现在,我想传递另一个参数,也是 DialogFragment 的数据,但它必须是可选的,因为我不需要一直传递它。有没有办法让我实现这一目标?
编辑:
所以我从下面的评论中获取了建议并创建了一个二传手并将我希望传递给DiagramFragment的项目。它工作得很好,遗憾的是它没有帮助我解决我的问题。我想传递第二个数据的原因是我认为,如果用户打开 DialogFragment 并进行选择,然后重新打开 DialogFragment,他的最后选择就消失了。我想检查他已经以编程方式检查过的复选框,方法是将检查过的一次传递回 DialogFragment 然后将正确的索引设置回mSelectedItems- 但即使索引设置正确,复选框保持未选中状态..有解决方法吗?
static MyDialogFragment newInstance(int num) {
MyDialogFragment f = new MyDialogFragment();
// Supply num input as an argument.
Bundle args = new Bundle();
args.putInt("num", num);
f.setArguments(args);
return f;
}
...
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
mSelectedItems = new ArrayList(); // Where we track the selected items
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
// Set …Run Code Online (Sandbox Code Playgroud) android ×13
dialogfragment ×13
fragment ×2
adapter ×1
appcelerator ×1
call ×1
firebase ×1
function ×1
java ×1
kotlin ×1
layout ×1
module ×1
orientation ×1
timepicker ×1
toast ×1