Bur*_*077 5 android android-dialogfragment numberpicker dialogfragment
我正在学习 Android 编程的基础知识,但在使用 NumberPicker 时遇到了一些问题。
\n\n我已经接近我想要的了,对话框打开,小时和分钟数字选择器出现,但它们上面和下面没有数字可供滚动。我也无法使用弹出的键盘编辑数字。我尝试添加 onValueChange 侦听器,但当我使用键盘时它没有生成任何事件。
\n\n任何人都可以提供有关如何解决此问题的建议吗?到目前为止,我注意到我尝试使用某些活动或片段中的小部件执行很多操作,而这些特定类不支持这些操作。
\n\n以下是相关代码和图像的片段:
\n\n我有一个带有两个按钮的 ClockActivity 类:
\n\n...\npublic class ClockActivity extends ActionBarActivity {\n\n...\n\n@Override\nprotected void onCreate(Bundle savedInstanceState) {\n super.onCreate(savedInstanceState);\n setContentView(R.layout.activity_clock);\n\n // Define gui objects\n ...\n mWorkForTime = (Button)findViewById(R.id.work_for_time);\n mBreakForTime = (Button)findViewById(R.id.break_for_time);\n\n // Add listeners for the work for/break for buttons\n mWorkForTime.setOnClickListener(new View.OnClickListener() {\n @Override\n public void onClick(View v) {\n // Bring up the picker fragment\n DialogFragment newFragment = TimePickerFragment.newInstance(R.string.work_title);\n newFragment.show(getSupportFragmentManager(), "WorkTimePicker");\n }\n });\n mBreakForTime.setOnClickListener(new View.OnClickListener() {\n @Override\n public void onClick(View v) {\n // Bring up the picker fragment\n DialogFragment newFragment = TimePickerFragment.newInstance(R.string.break_title);\n newFragment.show(getSupportFragmentManager(), "BreakTimePicker");\n }\n });\n ...\nRun Code Online (Sandbox Code Playgroud)\n\nTimePickerFragment 类扩展了 DialogFragment:
\n\npublic class TimePickerFragment extends DialogFragment {\n // Setup the time pickers\n private NumberPicker mHourPicker;\n private NumberPicker mMinutePicker;\n\n public static TimePickerFragment newInstance(int title) {\n TimePickerFragment fragment = new TimePickerFragment();\n Bundle args = new Bundle();\n args.putInt("title", title);\n fragment.setArguments(args);\n return fragment;\n }\n\n @Override\n public Dialog onCreateDialog(Bundle savedInstanceState) {\n super.onCreateDialog(savedInstanceState);\n\n int title = getArguments().getInt("title");\n\n LayoutInflater inflater = getActivity().getLayoutInflater();\n\n View view = (View)inflater.inflate(R.layout.activity_time_picker, null);\n\n // Initialize the pickers\n mHourPicker = (NumberPicker)view.findViewById(R.id.hours_picker);\n mMinutePicker = (NumberPicker)view.findViewById(R.id.minutes_picker);\n mHourPicker.setMinValue(0);\n mMinutePicker.setMinValue(0);\n mHourPicker.setMaxValue(24);\n mMinutePicker.setMaxValue(59);\n\n\n Dialog alertDialog = new AlertDialog.Builder(getActivity())\n .setTitle(title)\n .setView(inflater.inflate(R.layout.activity_time_picker, null))\n .setNegativeButton(R.string.negate,\n new DialogInterface.OnClickListener() {\n @Override\n public void onClick(DialogInterface dialog, int which) {\n ((ClockActivity) getActivity()).doNegativeTimeDialogClick();\n }\n })\n .setPositiveButton(R.string.confirm,\n new DialogInterface.OnClickListener() {\n @Override\n public void onClick(DialogInterface dialog, int which) {\n ((ClockActivity) getActivity()).doPositiveTimeDialogClick();\n }\n })\n .create();\n return alertDialog;\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n以下是 DialogFragment 视图的 XML,位于
\n\n<?xml version="1.0" encoding="utf-8"?>\n <LinearLayout\n xmlns:android="http://schemas.android.com/apk/res/android"\n android:orientation="vertical"\n android:layout_width="match_parent"\n android:layout_height="match_parent">\n\n <LinearLayout\n android:layout_width="fill_parent"\n android:layout_height="wrap_content">\n\n <TextView\n android:layout_width="0dp"\n android:layout_weight="1"\n android:layout_height="wrap_content"\n android:gravity="center"\n android:text="@string/hours"\n android:textSize="24sp"\n android:textStyle="bold"/>\n\n <TextView\n android:layout_width="0dp"\n android:layout_weight="1"\n android:layout_height="wrap_content"\n android:gravity="center"\n android:text="@string/minutes"\n android:textSize="24sp"\n android:textStyle="bold"/>\n\n </LinearLayout>\n\n <LinearLayout\n android:layout_width="fill_parent"\n android:layout_height="wrap_content">\n\n <NumberPicker\n android:id="@+id/hours_picker"\n android:layout_width="0dp"\n android:layout_weight="1"\n android:layout_height="wrap_content"/>\n\n <NumberPicker\n android:id="@+id/minutes_picker"\n android:layout_width="0dp"\n android:layout_weight="1"\n android:layout_height="wrap_content"/>\n\n </LinearLayout>\n </LinearLayout>\nRun Code Online (Sandbox Code Playgroud)\n\n这是当前操作的图像:
\n\nhttps://i.stack.imgur.com/FqSoA.png
\n\n这是我想要的:
\n\nhttp://www.i-programmer.info/images/stories/Core/Android/Pickers/ten.gif
\n\n以下是当我尝试使用软键盘编辑 NumberPicker 时在控制台上看到的一些输出:
\n\n01-02 16:10:46.559 18438-18438/com.example.android.worktimer W/IInputConnectionWrapper\xef\xb9\x95 beginBatchEdit on inactive InputConnection\n01-02 16:10:46.569 18438-18438/com.example.android.worktimer W/IInputConnectionWrapper\xef\xb9\x95 endBatchEdit on inactive InputConnection\nRun Code Online (Sandbox Code Playgroud)\n
您必须向选择器提供您要选择的内容的数组。
String[] myStringArray = new String[]{"a","b","c"};
mMinutePicker.setMinValue(0);
mMinutePicker.setMaxValue(myStringArray.length - 1);
mMinutePicker.setDisplayedValues(myStringArray);
Run Code Online (Sandbox Code Playgroud)
和改变
Dialog alertDialog = new AlertDialog.Builder(getActivity()) .setTitle(title) .setView(inflater.inflate(R.layout.activity_time_picker, null))
Run Code Online (Sandbox Code Playgroud)
到
Dialog alertDialog = new AlertDialog.Builder(getActivity()).setTitle(title).setView(view)
Run Code Online (Sandbox Code Playgroud)
您再次夸大了视图。
| 归档时间: |
|
| 查看次数: |
3387 次 |
| 最近记录: |