2021年7月2日星期五

Android EditText输入框实现下拉且保存最近5个历史记录

文章结构:

image

一、需求阐述

技术部同事提出想要在APP上保存最近输入成功的5个密钥信息,同时支持可以下拉进行选择。

这也是为了方便客户在现在多次输入信息,帮助其快速进行输入。

二、实现思路:

目前想要实现的需求

1、想要实现保存用户输入的密钥信息。

2、通过点击右侧的下拉来触发,让用户去选择已经发送成功的信息。

3、通过SharedPreferences来保存每次APP退出后的数据。

4、当发送成功后,更新后台的存储数据,进行逻辑判断。

三、代码逻辑

下面图片是最终的实现效果,当输入标识和密钥,点击发送按钮,成功后将数据自动保存到后台的数组中。点击右侧的下拉图标后,在将其弹出。

image

image

后面又添加了清空历史记录的标签,就是在每一次添加更新后台数组后,数组的下一个标签为清空历史记录。

 1 s_btnDown.setOnClickListener(this);       //对其进行焦点监听

 1  case R.id.btnDown: 2   showListPopulWindow();       //调用显示PopuWindow 函数 3  break;

点击后触发PopuWindow函数,也就是将其下拉框,绑定到TextBox标签的下面。

 1  private void showListPopulWindow() { 2   final DeviceKeySecretManager list = ((MainActivity)getActivity()).deviceKeySecretManager;//要填充的数据 3   final ListPopupWindow listPopupWindow; 4   listPopupWindow = new ListPopupWindow(getActivity()); 5   listPopupWindow.setAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, list.getKeyList()));//用android内置布局,或设计自己的样式 6   listPopupWindow.setAnchorView(s_etAppKey);   //以哪个控件为基准,在该处以mEditText为基准 7   listPopupWindow.setModal(true); 8 9   listPopupWindow.setOnItemClickListener(new AdapterView.OnItemClickListener() {   //设置项点击监听 10    @Override 11    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 12     if (list.KeySecretSum==i){ 13      list.Clear();               //点击清空 14      s_etAppKey.setText("");       //把选择的选项内容展示在EditText上 15      s_etAppSecret.setText(""); 16     }else{ 17      s_etAppKey.setText(list.getKeyList()[i]);       //把选择的选项内容展示在EditText上 18      s_etAppSecret.setText(list.getSecretList()[i]); 19     } 20 21     listPopupWindow.dismiss();        //如果已经选择了,隐藏起来 22    } 23   }); 24   listPopupWindow.show();     //把ListPopWindow展示出来 25  }

密钥管理的逻辑类:

用于在发送成功后将历史密钥信息进行缓存,后期将其绑定到下拉列表中,也为了在APP退出和首次加载时,将数据保存和提取到缓存中。

 1 /** 2 * 标识和密钥管理 3 * 最多只存储5个密钥,超过5个就开始进行循环覆盖(从第一个开始)。 4 */ 5 class DeviceKeySecretManager { 6 7  public DeviceKeySecretManager() { 8   CurrentSaveIndex = 0; 9  } 10 11  public String[] getKeyList() { 12   return KeyList; 13  } 14 15  public String[] getSecretList() { 16   return SecretList; 17  } 18 19  /** 20  * 添加新到的key和secret到密钥库 21  * 1、先判断密钥库中是否存在key,如果存在则直接更新其secret值, 22  * 2、不存在则直接进行添加key/secret值。 23  */ 24  public void addBufferKeyAndSecret(String key, String secret) { 25   if (IntegerConversion.UseLoop(KeyList,key)) { 26    int index=0; 27    for (int i=0;i<KeyList.length;i++) { 28     if (KeyList[i].equals(key)){ 29      index=i; 30      break; 31     } 32    } 33    KeyList[index]=key; 34    SecretList[index]=secret; 35   } else { 36    if (KeySecretSum == 5) { 37     CurrentSaveIndex = CurrentSaveIndex == 5 ? 0 : CurrentSaveIndex; 38     KeyList[CurrentSaveIndex] = key; 39     SecretList[CurrentSaveIndex] = secret; 40     CurrentSaveIndex++; 41    } else { 42     KeyList[CurrentSaveIndex] = key; 43     SecretList[CurrentSaveIndex] = secret; 44     CurrentSaveIndex++; 45     KeySecretSum++; 46     KeyList[CurrentSaveIndex] = "清空历史记录"; 47    } 48   } 49  } 50 51  public void Clear() { 52   CurrentSaveIndex = 0; 53   KeySecretSum = 0; 54 55   for (int i = 0; i < KeyList.length; i++) { 56    KeyList[i] = null; 57   } 58 59   for (int i = 0; i < SecretList.length; i++) { 60    SecretList[i] = null; 61   } 62  } 63 64  public int CurrentSaveIndex = 0;     //当前保存的序号 65  public int KeySecretSum = 0;      //key的总个数,最多存储5个。 66  private String[] KeyList = new String[6]; 67  private String[] SecretList = new String[5]; 68 }

APP退出和首次加载时,对数据在本地进行保存和提取;

 1  /** 2  * 读取保存的文件 3  */ 4  private void getSavedPreference() { 5   try { 6    SharedPreferences pref = this.getSharedPreferences(getResources().getString(R.string.app_name), MODE_PRIVATE); 7    int sum=pref.getInt("KeySecretSum", 0); 8 9    for (int i=0;i<=sum;i++){ 10     deviceKeySecretManager.getKeyList()[i]=pref.getString("Key"+i, ""); 11    } 12 13    for (int i=0;i<sum;i++){ 14     deviceKeySecretManager.getSecretList()[i]=pref.getString("Secret"+i, ""); 15    } 16 17    deviceKeySecretManager.CurrentSaveIndex=sum==5?0:sum; 18    deviceKeySecretManager.KeySecretSum=sum; 19   } catch (Exception ex) { 20 21   } 22  } 23 24  /** 25  * 保存文件 26  * */ 27  private void setSavePreference() { 28   try { 29    SharedPreferences pref = getSharedPreferences(getResources().getString(R.string.app_name), MODE_PRIVATE); 30    SharedPreferences.Editor edit = pref.edit(); 31    edit.putInt("KeySecretSum", deviceKeySecretManager.KeySecretSum);    //现有保存的总个数 32 33    for (int i=0;i<=deviceKeySecretManager.KeySecretSum;i++){ 34     edit.putString("Key"+i, deviceKeySecretManager.getKeyList()[i]); 35    } 36 37    for (int i=0;i<deviceKeySecretManager.KeySecretSum;i++){ 38     edit.putString("Secret"+i, deviceKeySecretManager.getSecretList()[i]); 39    } 40    edit.commit(); 41   } catch (Exceptio......

原文转载:http://www.shaoqun.com/a/842158.html

跨境电商:https://www.ikjzd.com/

aeo:https://www.ikjzd.com/w/2356

gem:https://www.ikjzd.com/w/1997

cicpa考试:https://www.ikjzd.com/w/1375


文章结构:一、需求阐述技术部同事提出想要在APP上保存最近输入成功的5个密钥信息,同时支持可以下拉进行选择。这也是为了方便客户在现在多次输入信息,帮助其快速进行输入。二、实现思路:目前想要实现的需求1、想要实现保存用户输入的密钥信息。2、通过点击右侧的下拉来触发,让用户去选择已经发送成功的信息。3、通过SharedPreferences来保存每次APP退出后的数据。4、当发送成功后,更新后台的存储
中转贸易:https://www.ikjzd.com/w/1427
四川泸州获批设立跨境电子商务综合试验区:https://www.ikjzd.com/articles/113768
卖家新引流神器?亚马逊新功能Amazon Post你必须了解!:https://www.ikjzd.com/articles/113769
2020:制胜下一个十年 出口跨境电商全球布局加速度:https://www.ikjzd.com/articles/113770
2019年速卖通的逆势增长,阿里做了这三件事!:https://www.ikjzd.com/articles/113771
酒吧被陌生人带去卫生间啪到腿软 被陌生人做站不起来:http://lady.shaoqun.com/a/247291.html
女人把腿张开让男人桶 两根粗大在她腿间进进出出:http://lady.shaoqun.com/m/a/247508.html
一晚上要了小姑娘三次 被男同事伺候的爽了一夜:http://www.30bags.com/m/a/249871.html
裸睡时你遇到过哪些尴尬的事?:http://lady.shaoqun.com/a/398670.html
2021苏州暑假旅游哪里好玩又不热 暑假苏州好玩凉快的好地方 :http://www.30bags.com/a/466641.html
2021暑假黑龙江旅游哪里好玩 暑假黑龙江省内旅游景点推荐 :http://www.30bags.com/a/466642.html
2021暑假无锡旅游哪里好玩 暑假去无锡玩转各大古镇 :http://www.30bags.com/a/466643.html

没有评论:

发表评论