流式布局查询、添加、删除(数据库)

1.布局

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

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
    <EditText
        android:id="@+id/edit_keys"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"/>

    <Button
        android:id="@+id/btn_search"
        android:layout_width="80dp"
        android:layout_height="50dp"
        android:text="搜索"/>

</LinearLayout>

    <com.example.week01.FlowLayout
        android:id="@+id/flow"
        flow:textSize="30sp"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:text="iphone"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/text_view"/>

    </com.example.week01.FlowLayout>
<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:onClick="delete"
    tools:ignore="OnClick"
    android:text="清除历史记录"/>

2.MainActivity

package com.example.week01;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import com.example.week01.database.FlowDatabase;

import java.util.List;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

private EditText edit_keys;
private Button btn_search;
private FlowLayout flow;
private FlowDatabase flowDatabase;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    edit_keys = findViewById(R.id.edit_keys);
    btn_search = findViewById(R.id.btn_search);
    flow = findViewById(R.id.flow);
    //新建或者初始化数据库
    flowDatabase = new FlowDatabase(this);
    btn_search.setOnClickListener(this);
    //查询搜索历史
    List<String> data=flowDatabase.query();
    for (int i = 0; i < data.size(); i++) {
        //流式布局添加历史
        flow.addTextView(data.get(i));
    }
}

@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.btn_search:
            String keys = edit_keys.getText().toString();
            flow.addTextView(keys);
            flowDatabase.insert(keys);
            break;
    }

// inflate.findViewById(R.id.ftext);

}

public  void delete(View v){
    //移除所有view
    flow.removeAllViews();
    //数据库清空所有数据
    flowDatabase.delete();
}

}

3.FlowLayout

package com.example.week01;

import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TextView;

public class FlowLayout extends FrameLayout {
private final static int H_DISTANCE = 20;//水平间距是20
private final static int V_DISTANCE = 20;//竖直间距是20
private float mTextSize;

public FlowLayout(Context context) {
    super(context);
}

public FlowLayout(Context context, AttributeSet attrs) {
    super(context, attrs);
    //自定义
    TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.flow);
    mTextSize = array.getDimension(R.styleable.flow_textSize, 0);
}

public FlowLayout(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.flow);
    mTextSize = array.getDimension(R.styleable.flow_textSize, 0);
}

public void addTextView(String keys) {
    //加载布局页面
    TextView textView = (TextView) View.inflate(getContext(), R.layout.flow_item, null);
    textView.setText(keys);
    //布局宽高自适应
    FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
    //设置控件布局参数
    textView.setLayoutParams(params);
    this.addView(textView);
}

@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
    super.onLayout(changed, left, top, right, bottom);
    int width = getWidth();//获取本控件的宽度,用于计算换行
    int row = 0;//行数

    int disWidth = H_DISTANCE;//子控件左边的坐标
    for (int i = 0; i < getChildCount(); i++) {
        View view = getChildAt(i);//查找子控件
        int viewWidth = view.getWidth();
        int viewHeight = view.getHeight();
        Log.i("dt", "textHeight" + viewHeight);

        if (disWidth + viewWidth > width) {//接下来的控件的右边坐标超过了屏幕宽度
            row++;//行数增加
            disWidth = H_DISTANCE;//还原左边坐标
        }
        //第一个参数是左边坐标,第二个参数是上边坐标
        //左坐标应该是每行子控件宽度的总和disWidth
        //右坐标为左坐标+子控件宽度
        //上坐标应该是行数*控件高度
        //下坐标是上坐标+控件高度=(行数+1)*控件高度

        int viewTop = row * viewHeight + row * V_DISTANCE;
        view.layout(disWidth, viewTop, disWidth + viewWidth, viewTop + viewHeight);//子控件布局
        disWidth += (viewWidth + H_DISTANCE);//记录下一次子控件左边的坐标
    }
}

}

4.FlowDatabase数据库创建表

package com.example.week01.database;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import java.util.ArrayList;
import java.util.List;

public class FlowDatabase extends SQLiteOpenHelper {
private final SQLiteDatabase database;
String table=“flowtable”;

public FlowDatabase(Context context) {
    super(context, "flow.db", null, 1);
    database = getWritableDatabase();
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("create table flowtable(id integer primary key autoincrement,keys text)");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}
public List<String> query(){
    Cursor cursor = database.query(table, null, null, null, null, null, null);
    List<String> list=new ArrayList<>();
    while (cursor.moveToNext()){
        String keys = cursor.getString(cursor.getColumnIndex("keys"));
        list.add(keys);
    }
    return list;
}
/*
删除数据
 */
public void delete(){
    database.delete(table,null,null);
}
/*
添加
 */
public void insert(String keys){
    ContentValues values=new ContentValues();
    values.put("keys",keys);//第一个参数是数据表的字段名
    database.insert(table,null,values);
}

}

猜你喜欢

转载自blog.csdn.net/qq_43603372/article/details/84670931
今日推荐