Android 的在Fragment中ListView 通过内置数据库动态加载显示

Android 的在Fragment中ListView 通过内置数据库动态加载显示

首先肯定要先有一个数据库,这部分比较简单直接附代码啦!

这个是数据库的操作类

public class DatasDAO 
{
    SQLiteDatabase databases;
       
    public DatasDAO(SQLiteDatabase databases) {
        this.databases = databases;
    }
    
    //插入
    public  boolean insertData(Data user){
        ContentValues values=new ContentValues();  //key-value---hashmap
        //id不能插入,在数据库中是自增长的
         values.put("id",user.getId());
        values.put("tempa",user.getTempa());
        values.put("humi",user.getHumi());  //title是数据库表的字段,不能错
        values.put("light",user.getLight());
        values.put("time",user.getTime());

        //insert into t_notes values(1,"","")
        databases.insert("t_datas",null,values);  //表名,插入的条件,插入的数据
        return true;

    }

    //删除
    public  boolean deleteData(String username){
       databases.delete("t_datas","id=?",new String[]{username});
       return true;
    }
    //查找
    public Data query(String username){   //返回查找的对象记录
        //select * ftom t_notes where id=?
        Cursor cursor=databases.query("t_datas",null,"id=?",new String[]{username},null,null,null);
        Data notes=null;
        if(cursor.moveToNext()){
            cursor.getString(0);
            cursor.getString(1);
            cursor.getString(2);
            cursor.getString(3);
            cursor.getString(4);
            notes=new Data(cursor.getInt(0),cursor.getString(1),cursor.getString(2),cursor.getString(3),cursor.getString(4));
        }
        return notes;
    }
    public LinkedList<Data> readAll()
    {
        LinkedList<Data> list=new LinkedList<Data>();
        Cursor cursor=databases.rawQuery("select * from t_datas",null);
        while(cursor.moveToNext())
        {
            Data user=new Data();
            user.setId(cursor.getInt(0));
            user.setTempa(cursor.getString(1));
            user.setHumi(cursor.getString(2));
            user.setLight(cursor.getString(3));
            user.setTime(cursor.getString(4));
            list.add(user);
        }
        return list;
    }
    public boolean DeleAll(){
        databases.execSQL("DELETE FROM t_datas");
        return true;
    }
    }

这个是数据库建立的必要文件MySQLiteDBH.java

public class MySQLiteDBH extends SQLiteOpenHelper {
    private String Create_table_SQL="create Table t_datas(id Integer Primary Key,tempa varchar(50),humi varchar(50),light varchar(50),time varchar(100))";

    public MySQLiteDBH(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
       /*
        context:  上下文
        name:数据库的名称
        factory:游标工厂
        version:数据库的版本
        */
    }

    //这个方法用来建表的,系统自动回调这个方法
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        sqLiteDatabase.execSQL(Create_table_SQL);
    }
    //这个方法在数据库升级的时候自动回调这个方法
    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }
}

还有一个是数据类,这个比较简单所以就不附了!

接下来就是在Layout里面写代码了
这个是data_list_contact.xml的

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".DataFragment"
    android:id="@+id/swipeRefreshLayout">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:gravity="center">
        <ImageButton
            android:id="@+id/reset"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:background="@drawable/reset"
            android:gravity="center_horizontal"/>
        <TextView
            android:layout_width="90dp"
            android:layout_height="15dp"
            android:text="全部清除"
            android:textSize="11dp"
            android:textStyle="italic"
            android:textColor="@color/txcolor"
            android:gravity="center_horizontal"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:background="#d9dada">

        <TextView
            android:text="温度"
            android:layout_width="65dp"
            android:layout_height="wrap_content"
            android:textSize="18dp"
            android:gravity="center"
            android:textStyle="italic"
            android:textColor="@color/txcolor"
            />
        <TextView
            android:text="湿度"
            android:layout_width="65dp"
            android:layout_height="wrap_content"
            android:textSize="18dp"
            android:gravity="center"
            android:textStyle="italic"
            android:textColor="@color/txcolor"/>
        <TextView
            android:text="光照"
            android:layout_width="65dp"
            android:layout_height="wrap_content"
            android:textSize="18dp"
            android:gravity="center"
            android:textStyle="italic"
            android:textColor="@color/txcolor"/>
        <TextView
            android:text="时间"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:textSize="18dp"
            android:textStyle="italic"
            android:gravity="center"
            android:textColor="@color/txcolor"/>
    </LinearLayout>
    <ListView
        android:id="@+id/listContact"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </ListView>

</LinearLayout>

附一张这个布局的图片吧,不是很好看
附一张这个布局的图片吧
这个是另一个Layout_data_list.xml文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    tools:context=".DataFragment">


    <TextView
        android:id="@+id/txttemp"
        android:layout_width="wrap_content"
        android:layout_height="35dp"
        android:layout_weight="1"
        android:gravity="center"/>
    <TextView
        android:id="@+id/txthumi"
        android:layout_width="wrap_content"
        android:layout_height="35dp"
        android:layout_weight="1"
        android:gravity="center"/>
    <TextView
        android:id="@+id/txtlight"
        android:layout_width="wrap_content"
        android:layout_height="35dp"
        android:layout_weight="1"
        android:gravity="center"/>
    <TextView
        android:id="@+id/txttime"
        android:layout_width="wrap_content"
        android:layout_height="35dp"
        android:layout_weight="1"
        android:gravity="center"/>

</LinearLayout>

这个Layout是为了给适配器显示的时候的布局。
当然我用是的SimpleAdapter适配器
接下来就是最重要的DataFragment 里面的内容了

@SuppressLint("NewApi")
public class DataFragment extends Fragment {
    Date date;

    NotificationManager notificationManager;
    SimpleAdapter simpleAdapter;
    ListView listView;
    View rootView;
    Button looks;
    SQLiteDatabase database;
    MySQLiteDBHelper mySQLHelper;
    DatasDAO datasDAO;
    //是否第一次加载
    private boolean isFirstLoading = true;
    SwipeRefreshLayout swipeRefreshLayout;
    ImageButton imageButton;
    /**
     * 在fragment可见的时候,刷新数据
     */

    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        //rootView就是DialFragment
        rootView=inflater.inflate(R.layout.data_list_contact,container,false);
        notificationManager=(NotificationManager) getActivity().getSystemService(getActivity().NOTIFICATION_SERVICE);
     //   swipeRefreshLayout = (SwipeRefreshLayout)rootView.findViewById(R.id.swipeRefreshLayout);

    //    imageButton=getActivity().findViewById(R.id.reset);

        mySQLHelper=new MySQLiteDBHelper(rootView.getContext(),"datas_two.db",null,1);
        database=mySQLHelper.getWritableDatabase();
        datasDAO=new DatasDAO(database);

        init();
        listView=(ListView)rootView.findViewById(R.id.listContact);

         return rootView;
       // return super.onCreateView(inflater, container, savedInstanceState);
    }
   private void init() {


       ArrayList<Map<String, String>>  list = new ArrayList<Map<String, String>>();
       for (int i = 0; i < datasDAO.readAll().size(); i++) {
           //数据存入map
           Map<String, String> map = new HashMap<String, String>();
           map.put("tempe",   datasDAO.readAll().get(i).getTempa());
           map.put("humi",   datasDAO.readAll().get(i).getHumi());
           map.put("light", datasDAO.readAll().get(i).getLight());
           map.put("time", datasDAO.readAll().get(i).getTime());
           //map添加到集合list中
           list.add(map);
       }
       listView = (ListView) rootView.findViewById(R.id.listContact);

       simpleAdapter=new SimpleAdapter(getContext(),list,R.layout.layout_data_list,
               new String[]{"tempe","humi","light","time"},new int[]{R.id.txttemp,R.id.txthumi,R.id.txtlight,R.id.txttime});

       listView.setAdapter(simpleAdapter);

       listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
           @Override
           public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
               //c从View中取出name和phone

               TextView textName=(TextView) view.findViewById(R.id.txttemp);
               String nameNew=textName.getText().toString();

               TextView textPhone=(TextView) view.findViewById(R.id.txthumi);
               String phoneNew= textPhone.getText().toString();
               TextView textlight=(TextView) view.findViewById(R.id.txtlight);
               String light= textlight.getText().toString();
               TextView texttime=(TextView) view.findViewById(R.id.txttime);
               String time= texttime.getText().toString();

               Intent intent=new Intent(getContext(),DataDetailActivity.class);
               intent.putExtra("temp",nameNew);
               intent.putExtra("humi",phoneNew);
               intent.putExtra("light",light);
               intent.putExtra("time",time);
               startActivity(intent);
           //    Toast.makeText(getActivity(), "点击了第"+i+"个。"+"温度:"+nameNew+",湿度:"+phoneNew+",光照:"+light+"\r\n时间:"+time, Toast.LENGTH_LONG).show();
           }
       });
   }
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        imageButton=(ImageButton)getActivity().findViewById(R.id.reset);
        imageButton.setOnClickListener(new View.OnClickListener() {
            @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
            @Override
            public void onClick(View v) {
                if(datasDAO.DeleAll()) {
                    MenuActivity menuActivity=(MenuActivity)getActivity();
                    FragmentManager fragmentManager=menuActivity.getSupportFragmentManager();
                    FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
                    fragmentTransaction.add(R.id.contents,new DataFragment());
                    Toast.makeText(getContext(), "数据清除成功", Toast.LENGTH_LONG).show();
                }
            }
        });

    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if(requestCode==10){
            MenuActivity menuActivity=(MenuActivity)getActivity();
            FragmentManager fragmentManager=menuActivity.getSupportFragmentManager();
            FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
            fragmentTransaction.replace(R.id.contents,new DataFragment());
            fragmentTransaction.commit();
        }
    }
}

因为我是在Fragment里面动态加载的所以按钮监听以及适配器设置的时候需要getContext()来获取上下文,这里需要注意!!!

  • 3
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值