- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我需要从我的 fragment 创建一个 DatePeriodPicker,如下所示:
要创建日期期间对话框,我需要使用方法 .show();在这个方法中,我需要传递一个 fragmentManager。
DatePickerDialog dpd = DatePickerDialog.newInstance(
Fragment_Details.this,
1999,
3-1,
2,2000,2-1,3
);
dpd.setYearRange(2000,2020);
Calendar max_calendar = Calendar.getInstance();
dpd.setMaxDate(max_calendar);
dpd.show(getFragmentManager(),"P")
我的项目已经迁移到 androidX,所以每当我传递一个 fragment 管理器时,它都会传递一个 androidx fragment 管理器:(来 self 的项目)
import androidx.fragment.app.Fragment;
但是,位于我尝试使用的库中的一个类中的方法 .show() 使用此导入:
import android.app.Fragment;
我尝试创建一个 java 类,扩展 appcompat Activity 并将 fragmentmanager(android.app.Fragment) 传递给方法 .show()。该方法识别出 fragment 管理器来自 (AppCompat),但是它可能会在我从我的 fragment 创建此类的新实例后立即崩溃。
这是我崩溃时的日志:
D/ViewRootImpl@13a430d[PopupWindow:c0edac8]: ViewPostIme pointer 1
D/AbsListView: onTouchUp() mTouchMode : 0
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.mybimpos, PID: 19385
java.lang.IllegalStateException: Activity has been destroyed
at android.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1901)
at android.app.BackStackRecord.commitInternal(BackStackRecord.java:688)
at android.app.BackStackRecord.commit(BackStackRecord.java:646)
at android.app.DialogFragment.show(DialogFragment.java:233)
at com.example.mybimpos.Dialog_attemp_2.<init>(Dialog_attemp_2.java:17)
at com.example.mybimpos.Fragment_Reports_Details$2.onItemSelected(Fragment_Reports_Details.java:802)
at org.angmarch.views.NiceSpinner$2.onItemClick(NiceSpinner.java:177)
at android.widget.AdapterView.performItemClick(AdapterView.java:350)
at android.widget.AbsListView.performItemClick(AbsListView.java:1683)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:4094)
at android.widget.AbsListView$10.run(AbsListView.java:6583)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6944)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
这是我为尝试传递 appcompat fragment 管理器而创建的类:
public class Dialog_attemp_2 extends AppCompatActivity implements DatePickerDialog.OnDateSetListener {
public Dialog_attemp_2() {
DatePickerDialog dpd = DatePickerDialog.newInstance(
Dialog_attemp_2.this,
1999,
3-1,
2,2000,2-1,3
);
dpd.setYearRange(2000,2020);
Calendar max_calendar = Calendar.getInstance();
dpd.setMaxDate(max_calendar);
dpd.show(getFragmentManager(),"pierre");
}
@Override
public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth, int yearEnd, int monthOfYearEnd, int dayOfMonthEnd) {
}
}
我使用以下代码从我的 fragment 中调用此类:
new Dialog_attemp_2();
最佳答案
使用 androidx 你可以定义一个 DialogFragment
使用 DatePickerDialog
的实例
import androidx.fragment.app.DialogFragment;
public static class DatePickerFragment extends DialogFragment
implements DatePickerDialog.OnDateSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current date as the default date in the picker
final Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
// Create a new instance of DatePickerDialog and return it
return new DatePickerDialog(getActivity(), this, year, month, day);
}
public void onDateSet(DatePicker view, int year, int month, int day) {
// Do something with the date chosen by the user
}
}
并调用它:
DialogFragment newFragment = new DatePickerFragment();
newFragment.show(getSupportFragmentManager(), "datePicker");
选项 2:新 Material 组件
随着Material Components for Android您可以使用新的 MaterialDatePicker
。
目前它正在积极开发中,需要 android 库的 Material 组件版本 1.1.0。
implementation 'com.google.android.material:material:1.1.0-alpha09'
要选择一个单个日期,只需使用:
MaterialDatePicker.Builder<Long> builder = MaterialDatePicker.Builder.datePicker();
builder.setTitleText(R.string.your_text);
MaterialDatePicker<Long> picker = builder.build();
picker.show(getSupportFragmentManager(), picker.toString());
要选择一个日期范围,您可以使用日期范围选择器:
MaterialDatePicker.Builder<Pair<Long, Long>> builder =
MaterialDatePicker.Builder.dateRangePicker();
CalendarConstraints.Builder constraintsBuilder = new CalendarConstraints.Builder(); builder.setCalendarConstraints(constraintsBuilder.build());
MaterialDatePicker<?> picker = builder.build();
picker.show(getSupportFragmentManager(), picker.toString());
关于android - AppCompat 和 Androidx 之间的兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57605124/
升级/重构到 AndroidX 后我收到这个错误androidx.appcompat.appcompat.R 不存在在代码中显示 appcompat 符号无法解析 最佳答案 我遇到了和你一样的错误信息
我在使用 AppCompat 时突然想到,我一直在布局 XML 文件中使用 Button 而不是 android.support.v7.widget.AppCompatButton 之类的东西。我通过
我刚刚升级到 AppCompat v23,发现 setSupportProgressBarIndeterminateVisibility 已弃用。但是,我无法找到替代方案,文档对此似乎非常薄弱。 如果
可以像这样使用 CoordinatorLayout 和自定义 FloatingActionButton: Futuresimple - FloatingActionButton 或 Clans - F
我正忙着尝试实现支持库,以便我可以使用 AppCompatActivty 据我所知,我把所有东西都放在了正确的地方。但我仍然收到错误。 样式.xml
有以下 Theme.AppCompat 类: Theme.AppCompat Theme.AppCompat.Light Theme.AppCompat.Light.DarkActionBar The
我更新了compileSDkversion从 27 日到 28 日。 添加于 gradle.properties文件: android.useAndroidX=true android.enableJ
我正在尝试构建一个 react native 应用程序,但它返回此错误: > Could not resolve all task dependencies for configuration ':a
我正在迁移到 androidX,但我收到: Could not find androidx.appcompat:appcompat:1.0.2. Required by: project :a
我正在尝试升级我的 gradle。当我将 appcompat 从 1.0.2 更新到 1.1.0 时,我的 webview 在某些手机上不再工作。 (API 21 和 22)。 有没有一种聪明的方法可
我是 Android 开发的绝对初学者,并尝试构建测试自动化来测试移动应用程序。经过数周的 IntelliJ 设置后,我仍然面临问题,其中包括以下问题。 因为我使用的是 SDK ver 29,我被告知
我正在使用 v7 appcompat 支持库。操作项在 actionBar 中显示的工作在较新或较旧的设备上都很好。 但是,我没有在 API 7 上得到溢出。例如: appco
最新链接app-compat这是1.1.0 . 将我的应用程序升级到最新版本后 app-compat我的语言设置在 以下的手机上停止工作API 24 (粗略地说,肯定不适用于 API 21 及以下版本
这里的 iOS 开发人员被扔进了 Android 项目的狼群中。我收到一些错误代码,它们都表示类似于 ThemeUtils: View class androidx.appcompat.widget.
这里的 iOS 开发人员被扔进了 Android 项目的狼群中。我收到一些错误代码,它们都表示类似于 ThemeUtils: View class androidx.appcompat.widget.
我最近将我的应用程序升级为 Material 主题。但是,我在 4.2.2 三星平板电脑上遇到崩溃。堆栈跟踪(在下面发布)告诉我我没有使用 Theme.AppCompat 的后代,尽管我相信我是。该应
我正在使用 AppCompat 22.1.1 Base.Widget.AppCompat.Button 和 Widget.AppCompat.Button 有什么区别? 最佳答案 在 AppCompa
我已经在多个地方看到了这个问题。问题似乎与过去的gradle版本3和android studio版本3的更新有关。每当我将依赖项更改为较新的版本时,我都会不断收到错误消息: Could not fin
我已将此资源添加到我的项目中,它向我显示了一个警告。 我该如何解决? The problem still continues (I don't know, if I
我为建议行定义了一个布局,但在将 AppCompat 库更新到 22.1 后,忽略了 styles.xml 中定义的布局。 这是我的 styles.xml 文件(已简化): @style/S
我是一名优秀的程序员,十分优秀!