android – 如何处理**网格视图**配置更改?

android – 如何处理**网格视图**配置更改?,第1张

概述我在我的应用程序的活动中使用网格视图.每个网格视图行包含三个复选框,可以根据用户想要从数据库查询的内容将其设置为选择/不选择.该活动还包括一个editText,每次活动开始时都会出现onScreenKeyboard,这里我遇到了问题. OnScreenKeyboard,当出现干扰gridview时,它的一些复选框就会消失.我的想法是每次配置更改时刷新网格视图.我尝试通过onRetainNonCon 我在我的应用程序的活动中使用网格视图.每个网格视图行包含三个复选框,可以根据用户想要从数据库查询的内容将其设置为选择/不选择.该活动还包括一个editText,每次活动开始时都会出现onScreenKeyboard,这里我遇到了问题. OnScreenKeyboard,当出现干扰grIDvIEw时,它的一些复选框就会消失.我的想法是每次配置更改时刷新网格视图.我尝试通过onRetainNonConfigurationInstance()返回一个对象来处理这个问题.当我使用getLastNonConfigurationInstance()来检索返回的对象时,Object包含一个数组列表,用于填充我的grIDvIEw行但是onCreate(),它显示为null.任何人都可以建议我如何处理这个问题或者是否有任何其他方法可以使我的grIDVIEw在配置更改时表现正常.以下是代码,我想说清楚我已经在清单文件中添加了keyboardHIDden配置更改但是当键盘出现时有时不会触发onConfigurationChanged()
@OverrIDeprotected voID onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentVIEw(R.layout.failureselection);    findLocalWidgets(); //Initializes Layout Objects    if(configchanged){                    //Re populate grID vIEw                        customDataGrIDRows = (ArrayList<CustomGrIDVIEwRow>) getLastNonConfigurationInstance();                        dgvwFailures.setAdapter(new CustomGrIDVIEwAdapter(this,customDataGrIDRows));                                configchanged = false;                      }else{                            fillFailuresList(customDataGrIDRows);                            dgvwFailures.setAdapter(new CustomGrIDVIEwAdapter(this,customDataGrIDRows));                    }    }@OverrIDepublic voID onConfigurationChanged(Configuration newConfig) {    super.onConfigurationChanged(newConfig);    setContentVIEw(R.layout.failureselection);    configchanged = true;}@OverrIDepublic Object onRetainNonConfigurationInstance() {    return customDataGrIDRows;}private boolean fillFailuresList(        ArrayList<CustomGrIDVIEwRow> customDataGrIDRows) {    boolean isFilled = false;    try {        // Adding Failures data        customDataGrIDRows.add(new CustomGrIDVIEwRow(false,"Hood",false,"Assembly Defect","Masking Poor"));        customDataGrIDRows.add(new CustomGrIDVIEwRow(false,"Floor","Forget Work","Assembly Defect"));        customDataGrIDRows.add(new CustomGrIDVIEwRow(false,"Grill","Incorrect Assembly","Bad Company"));        customDataGrIDRows.add(new CustomGrIDVIEwRow(false,"R Right Frame","Interference","Fix Large Effort"));        customDataGrIDRows.add(new CustomGrIDVIEwRow(false,"R left Frame","Leakage","High IncIDence"));        customDataGrIDRows.add(new CustomGrIDVIEwRow(false,"R Frame","Dirt","Recurrence"));        customDataGrIDRows.add(new CustomGrIDVIEwRow(false,"OutsIDe R Frame","Decal","Checking"));        customDataGrIDRows.add(new CustomGrIDVIEwRow(false,"F Right Frame","Other","Foreign Body"));        customDataGrIDRows.add(new CustomGrIDVIEwRow(false,"F left Frame","","Not Caulking"));        customDataGrIDRows.add(new CustomGrIDVIEwRow(false,"F Frame","Painting Defect"));        customDataGrIDRows.add(new CustomGrIDVIEwRow(false,"OutsIE F Frame","Other"));        customDataGrIDRows.add(new CustomGrIDVIEwRow(false,""));        // Populating Failures grID vIEw//      dgvwFailures.setAdapter(new CustomGrIDVIEwAdapter(this,//              customDataGrIDRows));        isFilled = true;    } catch (Exception e) {        e.getMessage();    }    return isFilled;}
解决方法 有两种选择:

> How to prevent Custom Views from losing state across screen orientation changes为您的CustomGrIDVIEwRow.
>在适配器中创建一个方法,并将值放在一个包中,并使用savedInstanceState在create上恢复它

小费:
删除任何< requestFocus />从您的EditText布局.虽然AndroID会将焦点放在第一个可聚焦的视图上.

另一个黑客:How to remove focus without setting focus to another control?

总结

以上是内存溢出为你收集整理的android – 如何处理**网格视图**配置更改?全部内容,希望文章能够帮你解决android – 如何处理**网格视图**配置更改?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1149539.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)

    保存