安卓:DatePicker的不工作的内部活动 [英] Android: DatePicker not working inside Activity

查看:91
本文介绍了安卓:DatePicker的不工作的内部活动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的应用程序有一个的TabBar和我使用的ActivityGroup加载内容到每个选项卡,如下图所示。

 公共类第一集团扩展的ActivityGroup {

        //记住这一个静态变量,使之成为所有nesten活动的访问,让他们操纵的观点
 公共静态第一集团组;

        //需要的,如果你想后退按钮正常工作跟踪历史的,不要使用这个,如果你的活动需要大量的内存。
 私人的ArrayList<视图>历史;

 @覆盖
 保护无效的onCreate(包savedInstanceState){
       super.onCreate(savedInstanceState);
       this.history =新的ArrayList<视图>();
       组=这一点;

              //开始根系活力withing组,并得到其观点
       查看查看= getLocalActivityManager()。startActivity(FlightsActivity,新
                   意图(这一点,FlightsActivity.class)
                   .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
                                      .getDecorView();

              //替换此的ActivityGroup的观点
       replaceView(视图);

    }

 公共无效replaceView(视图v){
                //添加旧的历史
  history.add(五);
                //改变这一组查看到新的视图。
  的setContentView(五);
 }
 

我有内部的FlightsActivity活动类和我需要一个日期选择器是displayed.I写了$ C $下,图像的onclick事件的图像,它工作正常,当我直接指定FlightsActivity作为的选项卡的内容,而不是通过ActivityGroup.But加载现在我得到一个错误

  10-20 14:11:16.302:ERROR / AndroidRuntime(294):致命异常:主要
10-20 14:11:16.302:ERROR / AndroidRuntime(294):android.view.WindowManager $ BadTokenException:无法添加窗口 - 令牌android.app.LocalActivityManager$LocalActivityRecord@43e497e0无效;在您的活动运行?
10-20 14:11:16.302:ERROR / AndroidRuntime(294):在android.view.ViewRoot.setView(ViewRoot.java:505)
10-20 14:11:16.302:ERROR / AndroidRuntime(294):在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
10-20 14:11:16.302:ERROR / AndroidRuntime(294):在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
10-20 14:11:16.302:ERROR / AndroidRuntime(294):在android.view.Window $ LocalWindowManager.addView(Window.java:424)
10-20 14:11:16.302:ERROR / AndroidRuntime(294):在android.app.Dialog.show(Dialog.java:241)
10-20 14:11:16.302:ERROR / AndroidRuntime(294):在android.app.DatePickerDialog.show(DatePickerDialog.java:129)
10-20 14:11:16.302:ERROR / AndroidRuntime(294):在android.app.Activity.showDialog(Activity.java:2556)
10-20 14:11:16.302:ERROR / AndroidRuntime(294):在android.app.Activity.showDialog(Activity.java:2514)
10-20 14:11:16.302:ERROR / AndroidRuntime(294):在tabviewapp.com.FlightsActivity $ 10.onClick(FlightsActivity.java:166)
10-20 14:11:16.302:ERROR / AndroidRuntime(294):在android.view.View.performClick(View.java:2408)
10-20 14:11:16.302:ERROR / AndroidRuntime(294):在android.view.View $ PerformClick.run(View.java:8816)
10-20 14:11:16.302:ERROR / AndroidRuntime(294):在android.os.Handler.handleCallback(Handler.java:587)
10-20 14:11:16.302:ERROR / AndroidRuntime(294):在android.os.Handler.dispatchMessage(Handler.java:92)
10-20 14:11:16.302:ERROR / AndroidRuntime(294):在android.os.Looper.loop(Looper.java:123)
10-20 14:11:16.302:ERROR / AndroidRuntime(294):在android.app.ActivityThread.main(ActivityThread.java:4627)
10-20 14:11:16.302:ERROR / AndroidRuntime(294):在java.lang.reflect.Method.invokeNative(本机方法)
10-20 14:11:16.302:ERROR / AndroidRuntime(294):在java.lang.reflect.Method.invoke(Method.java:521)
10-20 14:11:16.302:ERROR / AndroidRuntime(294):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:868)
10-20 14:11:16.302:ERROR / AndroidRuntime(294):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
10-20 14:11:16.302:ERROR / AndroidRuntime(294):在dalvik.system.NativeStart.main(本机方法)
 

下面是我的$ C $下实施日期选择器:

  mPickDate =(ImageView的)findViewById(R.id.pickDate);
  mPickDate.setOnClickListener(新View.OnClickListener(){
            公共无效的onClick(视图v){
             的ShowDialog(DATE_DIALOG_ID);
            }
        });

@覆盖
 受保护的对话框onCreateDialog(INT ID){
     开关(ID){
     案例DATE_DIALOG_ID:
         返回新DatePickerDialog(这一点,
                     mDateSetListener,
                     mYear,mMonth,MDAY);
     案例DATE_DIALOG_ID_RETURN:
         返回新DatePickerDialog(这一点,
           mDateSetListenerreturn,
                     mYear,mMonth,MDAY);
     }
     返回null;
 }

 //更新日期TextView的
    私人无效updateDisplay(TextView的mDateDisplay){
        mDateDisplay.setText(
            新的StringBuilder()
                    //月份是0基于所以加1
                   .append(MDAY).append( - )
                   .append(mMonth + 1).append( - )
                   .append(mYear).append()


                    );
    }
    私人DatePickerDialog.OnDateSetListener mDateSetListener =
        新DatePickerDialog.OnDateSetListener(){

            公共无效onDateSet(DatePicker的观点,年整型,
                                  INT monthOfYear,诠释DAYOFMONTH){
                mYear =年;
                mMonth = monthOfYear;
                MDAY = DAYOFMONTH;
                updateDisplay(mDateDisplay);
            }
        };

        私人DatePickerDialog.OnDateSetListener mDateSetListenerreturn =
            新DatePickerDialog.OnDateSetListener(){

                公共无效onDateSet(DatePicker的观点,年整型,
                                      INT monthOfYear,诠释DAYOFMONTH){
                    mYear =年;
                    mMonth = monthOfYear;
                    MDAY = DAYOFMONTH;
                    updateDisplay(mDateDisplayreturn);
                }
            };
 

解决方案

试试这个,以显示你的背景来代替:

来代替:

的setContentView(R.layout.xyz);

尝试: 查看viewToLoad = LayoutInflater.from(this.getParent())膨胀(R.layout.xyz,NULL);

  this.setContentView(viewToLoad);
 

In my application I have a Tabbar and I am using ActivityGroup to load contents into each tab as shown below.

public class FirstGroup extends ActivityGroup {

        // Keep this in a static variable to make it accessible for all the nesten activities, lets them manipulate the view
 public static FirstGroup group;

        // Need to keep track of the history if you want the back-button to work properly, don't use this if your activities requires a lot of memory.
 private ArrayList<View> history;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       this.history = new ArrayList<View>();
       group = this;

              // Start the root activity withing the group and get its view
       View view = getLocalActivityManager().startActivity("FlightsActivity", new
                   Intent(this,FlightsActivity.class)
                   .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
                                      .getDecorView();

              // Replace the view of this ActivityGroup
       replaceView(view);

    }

 public void replaceView(View v) {
                // Adds the old one to history
  history.add(v);
                // Changes this Groups View to the new View.
  setContentView(v);
 }

i have an image inside the FlightsActivity activity class and on the onClick event of the image I need a datepicker to be displayed.I have written the code for that and it was working fine when I was directly specifying FlightsActivity as the content of the tab instead of loading it through the ActivityGroup.But now i am getting an error

10-20 14:11:16.302: ERROR/AndroidRuntime(294): FATAL EXCEPTION: main
10-20 14:11:16.302: ERROR/AndroidRuntime(294): android.view.WindowManager$BadTokenException: Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord@43e497e0 is not valid; is your activity running?
10-20 14:11:16.302: ERROR/AndroidRuntime(294):     at android.view.ViewRoot.setView(ViewRoot.java:505)
10-20 14:11:16.302: ERROR/AndroidRuntime(294):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
10-20 14:11:16.302: ERROR/AndroidRuntime(294):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
10-20 14:11:16.302: ERROR/AndroidRuntime(294):     at android.view.Window$LocalWindowManager.addView(Window.java:424)
10-20 14:11:16.302: ERROR/AndroidRuntime(294):     at android.app.Dialog.show(Dialog.java:241)
10-20 14:11:16.302: ERROR/AndroidRuntime(294):     at android.app.DatePickerDialog.show(DatePickerDialog.java:129)
10-20 14:11:16.302: ERROR/AndroidRuntime(294):     at android.app.Activity.showDialog(Activity.java:2556)
10-20 14:11:16.302: ERROR/AndroidRuntime(294):     at android.app.Activity.showDialog(Activity.java:2514)
10-20 14:11:16.302: ERROR/AndroidRuntime(294):     at tabviewapp.com.FlightsActivity$10.onClick(FlightsActivity.java:166)
10-20 14:11:16.302: ERROR/AndroidRuntime(294):     at android.view.View.performClick(View.java:2408)
10-20 14:11:16.302: ERROR/AndroidRuntime(294):     at android.view.View$PerformClick.run(View.java:8816)
10-20 14:11:16.302: ERROR/AndroidRuntime(294):     at android.os.Handler.handleCallback(Handler.java:587)
10-20 14:11:16.302: ERROR/AndroidRuntime(294):     at android.os.Handler.dispatchMessage(Handler.java:92)
10-20 14:11:16.302: ERROR/AndroidRuntime(294):     at android.os.Looper.loop(Looper.java:123)
10-20 14:11:16.302: ERROR/AndroidRuntime(294):     at android.app.ActivityThread.main(ActivityThread.java:4627)
10-20 14:11:16.302: ERROR/AndroidRuntime(294):     at java.lang.reflect.Method.invokeNative(Native Method)
10-20 14:11:16.302: ERROR/AndroidRuntime(294):     at java.lang.reflect.Method.invoke(Method.java:521)
10-20 14:11:16.302: ERROR/AndroidRuntime(294):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
10-20 14:11:16.302: ERROR/AndroidRuntime(294):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
10-20 14:11:16.302: ERROR/AndroidRuntime(294):     at dalvik.system.NativeStart.main(Native Method)

Below is my code for implementing the datepicker:

mPickDate = (ImageView) findViewById(R.id.pickDate);
  mPickDate.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
             showDialog(DATE_DIALOG_ID);
            }
        });

@Override
 protected Dialog onCreateDialog(int id) {
     switch (id) {
     case DATE_DIALOG_ID:
         return new DatePickerDialog(this,
                     mDateSetListener,
                     mYear, mMonth, mDay);
     case DATE_DIALOG_ID_RETURN:
         return new DatePickerDialog(this,
           mDateSetListenerreturn,
                     mYear, mMonth, mDay);     
     }
     return null;
 }

 // updates the date in the TextView
    private void updateDisplay(TextView mDateDisplay) {
        mDateDisplay.setText(
            new StringBuilder()
                    // Month is 0 based so add 1
                   .append(mDay).append("-")
                   .append(mMonth + 1).append("-")
                   .append(mYear).append("")


                    );
    }
    private DatePickerDialog.OnDateSetListener mDateSetListener =
        new DatePickerDialog.OnDateSetListener() {

            public void onDateSet(DatePicker view, int year, 
                                  int monthOfYear, int dayOfMonth) {
                mYear = year;
                mMonth = monthOfYear;
                mDay = dayOfMonth;
                updateDisplay(mDateDisplay);
            }
        };

        private DatePickerDialog.OnDateSetListener mDateSetListenerreturn =
            new DatePickerDialog.OnDateSetListener() {

                public void onDateSet(DatePicker view, int year, 
                                      int monthOfYear, int dayOfMonth) {
                    mYear = year;
                    mMonth = monthOfYear;
                    mDay = dayOfMonth;
                    updateDisplay(mDateDisplayreturn);
                }
            };

解决方案

Try this to display your context instead :

instead of :

setContentView(R.layout.xyz);

try : View viewToLoad = LayoutInflater.from(this.getParent()).inflate(R.layout.xyz, null);

    this.setContentView(viewToLoad );       

这篇关于安卓:DatePicker的不工作的内部活动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆