列表页分为两个部位 一个就是ListView布局
然后还需要重新创建一个布局文件 item
会把item填充进去 自定义布局这种
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ListView>
主页 上篇文章已经写了
我们在这篇需要加上一个自定义item
activity_show.xml 我们会在适配器中用到 我这里用到的是自定义适配器
<?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="wrap_content">
<TextView
android:id="@+id/list_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="title"/>
<TextView
android:id="@+id/list_time"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="20"/>
</LinearLayout>
这个是总的Java代码 ,我们等下 一一拆分
package top.com.text.ui;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
import top.com.text.R;
import top.com.text.entity.Article;
import top.com.text.utils.DB;
import top.com.text.utils.L;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button bt_add;
private DB db;
public List<Article> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
db=new DB(this,"article.db",null,1);
final SQLiteDatabase sqlDB=db.getWritableDatabase();
// Cursor cursor = sqlDB.query("article",null,null, null,null, null,null);
list=new ArrayList<Article>();
//查询所有笔记,并将笔记展示出来
Cursor cursor=sqlDB.rawQuery("select * from article",null);
while(cursor.moveToNext()){
int id = cursor.getInt(cursor.getColumnIndex("id"));
String title = cursor.getString(cursor.getColumnIndex("title"));
String auth = cursor.getString(cursor.getColumnIndex("auth"));
String time = cursor.getString(cursor.getColumnIndex("time"));
String content = cursor.getString(cursor.getColumnIndex("content"));
Article article=new Article(id,title,auth,content,time);
list.add(article);
}
//拿到listView对象
final ListView listView=(ListView) findViewById(R.id.list);
//设置适配器
listView.setAdapter(new MyApter());
//单击查询
listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent=new Intent(getApplicationContext(),ShowActivity.class);
intent.putExtra("id",list.get(position).getId());
startActivity(intent);
MainActivity.this.finish();
}
});
//长按删除
// listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
//
//
//
// @Override
// public boolean onItemLongClick(AdapterView<?> parent, View view, int position, final long id) {
//
// //AlerDialog判断是否删除记事
// new AlertDialog.Builder(MainActivity.this)
// .setTitle("提示框")
// .setMessage("确认删除该笔记??")
// .setPositiveButton("确定",
// new DialogInterface.OnClickListener() {
// @Override
// public void onClick(DialogInterface arg0,int arg1) {
//
// SQLiteDatabase sqlDB=db.getWritableDatabase();
// sqlDB.delete("article","id="+id,null);
// //删除后刷新列表
// MainActivity.this.onResume();
// Toast.makeText(
// MainActivity.this,
// "删除成功!!",
// Toast.LENGTH_LONG)
// .show();
// }
// }).setNegativeButton("取消", null).show();
// return true;
// }
// });
//
// SQLiteDatabase sqlDB=db.getWritableDatabase();
// sqlDB.delete("article","id="+id,null);
initView();
}
private void initView() {
bt_add=(Button) findViewById(R.id.bt_add);
bt_add.setOnClickListener(this);
}
//适配器类
class MyApter extends BaseAdapter{
//获取集合中有多少条元素,由系统调用
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final Article article=list.get(position);
View v=null;
//判断缓存是否为空
if(convertView == null){
v=View.inflate(MainActivity.this,R.layout.item,null);
}else{
v=convertView;
}
TextView list_title=(TextView) v.findViewById(R.id.list_title);
TextView list_time=(TextView) v.findViewById(R.id.list_time);
list_title.setText(article.getTitle());
list_title.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Article article1=(Article) getItem(position);
Log.i("Id:",article.getId()+" ");
Intent intent=new Intent(getApplicationContext(),ShowActivity.class);
intent.putExtra("article",article);
startActivity(intent);
}
});
list_time.setText(article.getTime());
list_time.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Article article1=(Article) getItem(position);
Log.i("Id:",article.getId()+" ");
Intent intent=new Intent(getApplicationContext(),ShowActivity.class);
intent.putExtra("article",article);
startActivity(intent);
}
});
list_time.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Article article1= (Article) getItem(position);
LongClick(MainActivity.this,article.getId());
return false;
}
});
return v;
}
}
private void LongClick(final Context mContext,final int id){
final AlertDialog.Builder normalDialog =
new AlertDialog.Builder(mContext);
//normalDialog.setIcon(R.drawable.icon_dialog);
normalDialog.setTitle("请注意:");
normalDialog.setMessage("你确定要删除这个日志吗?");
normalDialog.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
db=new DB(mContext,"article.db",null,1);
SQLiteDatabase sqlDB=db.getWritableDatabase();
sqlDB.delete("article","id="+id,null);
}
});
normalDialog.setNegativeButton("关闭",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//...To-do
}
});
// 显示
normalDialog.show();
}
@Override
public void onClick(View v) {
startActivity(new Intent(this,EditActivity.class));
}
}
列表显示数据
肯定首先连接数据库
然后需要一个list存放数据
我们在使用Cursor 进行存放 一直循环出来 cursor.moveToNext() 往list添加数据
然后使用findById 拿到List对象
给listView设置适配器
listView.setAdapter(new MyApter());
db=new DB(this,"article.db",null,1);
final SQLiteDatabase sqlDB=db.getWritableDatabase();
// Cursor cursor = sqlDB.query("article",null,null, null,null, null,null);
list=new ArrayList<Article>();
//查询所有笔记,并将笔记展示出来
Cursor cursor=sqlDB.rawQuery("select * from article",null);
while(cursor.moveToNext()){
int id = cursor.getInt(cursor.getColumnIndex("id"));
String title = cursor.getString(cursor.getColumnIndex("title"));
String auth = cursor.getString(cursor.getColumnIndex("auth"));
String time = cursor.getString(cursor.getColumnIndex("time"));
String content = cursor.getString(cursor.getColumnIndex("content"));
Article article=new Article(id,title,auth,content,time);
list.add(article);
}
//拿到listView对象
final ListView listView=(ListView) findViewById(R.id.list);
//设置适配器
listView.setAdapter(new MyApter());
适配器
继承BaseAdapter
获取元素大小 这些需要自己改一下
判断是否第一次缓存 也就是第一次打开
然后把item自定义布局文件 加载到ListView布局中
然后获取item 的那个item的textView id的对象
然后在把list的数据 添加到item上 就可以了
//适配器类
class MyApter extends BaseAdapter{
//获取集合中有多少条元素,由系统调用
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final Article article=list.get(position);
View v=null;
//判断缓存是否为空
if(convertView == null){
v=View.inflate(MainActivity.this,R.layout.item,null);
}else{
v=convertView;
}
TextView list_title=(TextView) v.findViewById(R.id.list_title);
TextView list_time=(TextView) v.findViewById(R.id.list_time);
list_title.setText(article.getTitle());
list_time.setText(article.getTime());
return v;
}
}
单击查看详细
可以使用两种方法 第一种是 在适配器 getVIew 里面获取数据 然后把数据传到另一个页面
另一个使用单击事件 获取id 然后 intent在传递id过去 然后又根据id查询
//单击查询
listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent=new Intent(getApplicationContext(),ShowActivity.class);
intent.putExtra("id",list.get(position).getId());
startActivity(intent);
MainActivity.this.finish();
}
});
另一个页面的代码
这里用了两个方法 第一个传递id 然后接受 没有写SQL语句 我实现的是直接传递数据对象
package top.com.text.ui;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.TextView;
import top.com.text.R;
import top.com.text.entity.Article;
import top.com.text.utils.L;
public class ShowActivity extends AppCompatActivity {
int id;
private TextView et_title;
private TextView et_auth;
private TextView et_content;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show);
// Intent intent=this.getIntent();
// id=intent.getIntExtra("id",0);
Log.i("id:", String.valueOf(id));
Intent intent=getIntent();
Article article=(Article) intent.getSerializableExtra("article");
Log.i("Id","id:"+article.getId());
Log.i("Name:",article.getAuth());
init();
et_title.setText(article.getTitle());
et_auth.setText(article.getAuth());
et_content.setText(article.getContent());
}
private void init() {
et_title=(TextView) findViewById(R.id.et_title1);
et_auth=(TextView) findViewById(R.id.et_auth1);
et_content=(TextView) findViewById(R.id.et_content1);
}
}
另一个方式
直接在getVIew中 把参数对象传递过去
list_title.setText(article.getTitle());
list_title.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Article article1=(Article) getItem(position);
Log.i("Id:",article.getId()+" ");
Intent intent=new Intent(getApplicationContext(),ShowActivity.class);
intent.putExtra("article",article);
startActivity(intent);
}
});
list_time.setText(article.getTime());
list_time.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Article article1=(Article) getItem(position);
Log.i("Id:",article.getId()+" ");
Intent intent=new Intent(getApplicationContext(),ShowActivity.class);
intent.putExtra("article",article);
startActivity(intent);
}
});
然后最后长按 一样的有两种 另一种 详细看代码
list_time.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Article article1= (Article) getItem(position);
// Intent intent = new Intent(getApplicationContext(),OpenLog.class);
// intent.putExtra("Log",log);
LongClick(MainActivity.this,article.getId());
return false;
}
});
长按事件 然后删除数据 这里没有删除控件 重新打开就可以啦
db=new DB(mContext,"article.db",null,1);
SQLiteDatabase sqlDB=db.getWritableDatabase();
sqlDB.delete("article","id="+id,null);
private void LongClick(final Context mContext,final int id){
final AlertDialog.Builder normalDialog =
new AlertDialog.Builder(mContext);
//normalDialog.setIcon(R.drawable.icon_dialog);
normalDialog.setTitle("请注意:");
normalDialog.setMessage("你确定要删除这个日志吗?");
normalDialog.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
db=new DB(mContext,"article.db",null,1);
SQLiteDatabase sqlDB=db.getWritableDatabase();
sqlDB.delete("article","id="+id,null);
}
});
normalDialog.setNegativeButton("关闭",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//...To-do
}
});
// 显示
normalDialog.show();
}