zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

android基础教程之android的listview与edittext冲突解决方法

Android方法 解决 冲突 基础教程 listview EditText
2023-06-13 09:15:18 时间

最近遇到一个关于android软键盘的问题。在ListView中每个Item中都有个EditText,在最后的几个Item中,EditText第一次点击界面还能向上弹出,正常显示,

但第二次点击时,软件盘就把最后的几个Item给正当住了。这样很影响用户体验的。

其实解决的办法只要想一下,我相信有经验的开发人员就能够想到,让软键盘在消失的时候让相应Item中的EditText消失焦点clearFouce();但是有个关键的问题,

就是在获得返回事件的时候,如果获得的事件不对那就不会达到想要的效果。这个back时间一定要是自定Layout中的back事件才可以。

直接上代码。

复制代码代码如下:


<cn.test.systemSetting.MyLayoutxmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/keyboardlayout"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:background="@drawable/main_bg"
   android:orientation="vertical">
   <ListView
               android:id="@+id/lv_data"
               android:layout_width="fill_parent"
               android:layout_height="fill_parent"
               android:layout_weight="1"
               android:cacheColorHint="#00000000"
               android:transcriptMode="normal"
               >
    </ListView>
</cn.test.systemSetting.MyLayout>

自定义layout中所作的处理:

复制代码代码如下:

packagecn.test.systemSetting;

importcom.********.R;

importandroid.content.Context;
importandroid.util.AttributeSet;
importandroid.view.KeyEvent;
importandroid.view.LayoutInflater;
importandroid.view.View;
importandroid.view.inputmethod.InputMethodManager;
importandroid.widget.EditText;
importandroid.widget.LinearLayout;
/**
 *
 *针对设备管理键盘事件的处理
 *divid小硕
 *
 ***/

publicclassMyLayoutextendsLinearLayout{
   privateContextcontext;
   publicMyLayout(Contextcontext){
       super(context);
       //TODOAuto-generatedconstructorstub
       this.context=context;
       LayoutInflater.from(context).inflate(R.layout.device_manager,this);//此处所加载的layout就是上面的xml,即它的名字就是device_manager.xml
   }
   publicMyLayout(Contextcontext,AttributeSetattrs,intdefStyle){
       super(context,attrs,defStyle);
       //TODOAuto-generatedconstructorstub
   }

   
   publicMyLayout(Contextcontext,AttributeSetattrs){
       super(context,attrs);
       //TODOAuto-generatedconstructorstub
   }
   @Override
   publicbooleandispatchKeyEventPreIme(KeyEventevent){
       //TODOAuto-generatedmethodstub
       if(context!=null){
           InputMethodManagerimm=(InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);
           if(imm.isActive()&&event.getKeyCode()==KeyEvent.KEYCODE_BACK){
               Viewview=DeviceManagerActivity.lv_data.getFocusedChild();
               if(view!=null){
                   view.clearFocus();
               }

           }
       }

       returnsuper.dispatchKeyEventPreIme(event);
   }
}

主界面所采用的加载方式要是这样的:

复制代码代码如下:
publicclassDeviceManagerActivityextendsActivityimplementsOnClickListener{
   publicstaticListViewlv_data;
   staticDevMgrAdapteradapter;

   protectedvoidonCreate(BundlesavedInstanceState){
       super.onCreate(savedInstanceState);
       //1.全屏
       requestWindowFeature(Window.FEATURE_NO_TITLE);//无标题
       getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
               WindowManager.LayoutParams.FLAG_FULLSCREEN);

       this.setContentView(newMyLayout(this));
       init();
   }
}