【附】相关架构及资料

源码、笔记、视频。高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter全方面的Android进阶实践技术,和技术大牛一起讨论交流解决问题。

image

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

// 判断搜索内容是否已经存在于历史文件,已存在则不重复添加

if (!old_text.contains(keyword + “,”)) {

SharedPreferences.Editor myeditor = mysp.edit();

myeditor.putString(“history”, builder.toString());

myeditor.commit();

}

}

public String[] getHistoryList() {

// 获取搜索记录文件内容

SharedPreferences sp = mContext.getSharedPreferences(“search_history”, 0);

String history = sp.getString(“history”, “”);

// 用逗号分割内容返回数组

String[] history_arr = history.split(“,”);

// 保留前50条数据

if (history_arr.length > 50) {

String[] newArrays = new String[50];

System.arraycopy(history_arr, 0, newArrays, 0, 50);

}

return history_arr;

}

/**

  • 清除搜索记录

*/

public void cleanHistory() {

SharedPreferences sp = mContext.getSharedPreferences(“search_history”, 0);

SharedPreferences.Editor editor = sp.edit();

editor.clear();

editor.commit();

}

最后呢,就到了关键的一步啦,在Activity里进行读写初始化操作啦。

package cn.cnpp.searchhistory;

import android.content.Context;

import android.content.Intent;

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

import android.text.Editable;

import android.text.TextWatcher;

import android.view.Gravity;

import android.view.View;

import android.view.ViewGroup;

import android.widget.ArrayAdapter;

import android.widget.AutoCompleteTextView;

import android.widget.TextView;

import android.widget.Toast;

import butterknife.BindView;

import butterknife.ButterKnife;

import butterknife.OnClick;

/**

  • @author dengyalan

*/

public class MainActivity extends AppCompatActivity {

@BindView(R.id.auto_search)

AutoCompleteTextView autoSearch;

@BindView(R.id.keyword_fl)

ZFlowLayout keywordFl;

@BindView(R.id.history_fl)

ZFlowLayout historyFl;

public static String[] searchWord = {“净水器”, “手机”, “电动车”, “洗衣机”, “沙发”, “冰箱”, “瓷砖”, “空调”, “床垫”, “卫浴”, “热水器”, “床”, “家具”, “手表”, “电视”, “集成灶”, “领带”, “保温杯”, “童装”, “自行车”, “空气净化器”, “地板”, “硅藻泥”, “油烟机”, “智能家居”};

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

ButterKnife.bind(this);

initView();

}

private void initView() {

initKeyword(searchWord);

initHistory();

String[] data = SPUtils.getInstance(this).getHistoryList();

ArrayAdapter autoCompleteAdapter = new ArrayAdapter(this,

R.layout.view_mw_textview, data);

autoSearch.setAdapter(autoCompleteAdapter);

autoSearch.addTextChangedListener(new TextWatcher() {

@Override

public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

}

@Override

public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

if (charSequence.length() > 0) {

}

}

@Override

public void afterTextChanged(Editable editable) {

}

});

}

private void initHistory() {

final String[] data = SPUtils.getInstance(this).getHistoryList();

ViewGroup.MarginLayoutParams layoutParams = new ViewGroup.MarginLayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

layoutParams.setMargins(10, 10, 10, 10);

historyFl.removeAllViews();

for (int i = 0; i < data.length; i++) {

if (isNullorEmpty(data[i])) {

return;

}

final int j = i;

//添加分类块

View paramItemView = getLayoutInflater().inflate(R.layout.adapter_search_keyword, null);

TextView keyWordTv = paramItemView.findViewById(R.id.tv_content);

keyWordTv.setText(data[j]);

keyWordTv.setBackgroundResource(R.drawable.whitebg_strokegrey_radius3);

historyFl.addView(paramItemView, layoutParams);

keyWordTv.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

autoSearch.setText(data[j]);

}

});

}

}

private void initKeyword(final String[] keyword) {

ViewGroup.MarginLayoutParams layoutParams = new ViewGroup.MarginLayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

layoutParams.setMargins(10, 10, 10, 10);

keywordFl.removeAllViews();

for (int i = 0; i < keyword.length; i++) {

final int j = i;

//添加分类块

View paramItemView = getLayoutInflater().inflate(R.layout.adapter_search_keyword, null);

TextView keyWordTv = paramItemView.findViewById(R.id.tv_content);

keyWordTv.setText(keyword[j]);

keyWordTv.setBackgroundResource(R.drawable.whitebg_strokegrey_radius3);

keywordFl.addView(paramItemView, layoutParams);

keyWordTv.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

autoSearch.setText(keyword[j]);

}

});

}

}

@OnClick({R.id.iv_back, R.id.clear_iv, R.id.tv_search})

public void onClick(View view) {

switch (view.getId()) {

case R.id.iv_back:

finish();

break;

case R.id.tv_search:

String searchKey = autoSearch.getText().toString();

if (!isNullorEmpty(searchKey)) {

Intent intent = new Intent(MainActivity.this, SearchResultActivity.class);

intent.putExtra(“key”, searchKey);

startActivityForResult(intent, 0);

String keyWord = autoSearch.getText().toString();

if (!isNullorEmpty(keyWord)) {

SPUtils.getInstance(MainActivity.this).save(autoSearch.getText().toString());

}

} else {

showToastShort(this, “搜索内容为空!”);

}

break;

case R.id.clear_iv:

SPUtils.getInstance(MainActivity.this).cleanHistory();

showToastShort(this, “已清除历史记录!”);

initHistory();

break;

default:

break;

}

}

private boolean isNullorEmpty(String str) {

return str == null || “”.equals(str);

}

private void showToastShort(Context context, String data) {

Toast toast = Toast.makeText(context, data, Toast.LENGTH_SHORT);

toast.setGravity(Gravity.CENTER, 0, 0);

toast.show();

}

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

if (requestCode == 0) {

if (resultCode == RESULT_OK) {

initHistory();

}

}

}

}

差点忘记还有布局文件:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”

android:layout_width=“match_parent”

android:layout_height=“match_parent”

android:background=“@color/white”

android:orientation=“vertical”>

<LinearLayout

android:layout_width=“match_parent”

android:layout_height=“45dp”

android:background=“@color/colorPrimary”

android:gravity=“center”

android:orientation=“horizontal”>

<ImageView

android:id=“@+id/iv_back”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_gravity=“center”

android:layout_marginRight=“3dp”

android:padding=“10dp”

android:src=“@mipmap/back” />

<AutoCompleteTextView

android:id=“@+id/auto_search”

android:layout_width=“0dp”

android:layout_height=“wrap_content”

android:layout_weight=“1”

android:background=“@drawable/whitebg_radius3”

android:completionThreshold=“1”

android:drawableLeft=“@mipmap/search_icon”

android:drawablePadding=“5dp”

android:hint=“请输入您要搜索的内容”

android:padding=“8dp”

android:singleLine=“true”

android:textSize=“12sp” />

<TextView

android:id=“@+id/tv_search”

android:layout_width=“wrap_content”

android:layout_height=“match_parent”

android:gravity=“center”

android:paddingLeft=“10dp”

android:paddingRight=“15dp”

android:text=“搜索”

android:textColor=“@color/white”

android:textSize=“13dp” />

<android.support.v4.widget.NestedScrollView

android:layout_width=“match_parent”

android:layout_height=“0dp”

android:layout_weight=“1”

android:scrollbars=“none”>

<LinearLayout

android:layout_width=“match_parent”

android:layout_height=“match_parent”

android:orientation=“vertical”

android:padding=“10dp”>

<TextView

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_marginBottom=“10dp”

android:drawableLeft=“@mipmap/fire_grey”

android:drawablePadding=“3dp”

android:text=“热门搜索”

android:textColor=“@color/grey_4d4d4d”

android:textSize=“13sp” />

<cn.cnpp.searchhistory.ZFlowLayout

android:id=“@+id/keyword_fl”

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:orientation=“vertical” />

<RelativeLayout

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:orientation=“horizontal”>

<TextView

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_marginBottom=“10dp”

android:layout_marginTop=“10dp”

android:drawableLeft=“@mipmap/history_grey”

android:drawablePadding=“3dp”

android:text=“搜索记录”

android:textColor=“@color/grey_4d4d4d”

android:textSize=“13sp” />

<ImageView

android:id=“@+id/clear_iv”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_alignParentRight=“true”

android:layout_centerVertical=“true”

android:padding=“10dp”

android:src=“@mipmap/delete_grey” />

<cn.cnpp.searchhistory.ZFlowLayout

android:id=“@+id/history_fl”

android:layout_width=“match_parent”

结尾

好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划,可以来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。

这里放上一部分我工作以来以及参与过的大大小小的面试收集总结出来的一套进阶学习的视频及面试专题资料包,主要还是希望大家在如今大环境不好的情况下面试能够顺利一点,希望可以帮助到大家~

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

searchhistory.ZFlowLayout

android:id=“@+id/history_fl”

android:layout_width=“match_parent”

结尾

好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划,可以来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。

这里放上一部分我工作以来以及参与过的大大小小的面试收集总结出来的一套进阶学习的视频及面试专题资料包,主要还是希望大家在如今大环境不好的情况下面试能够顺利一点,希望可以帮助到大家~

[外链图片转存中…(img-jzR1TV3E-1714991709158)]

[外链图片转存中…(img-KEkBi2pD-1714991709159)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐