如何用android studio实现新闻收藏

时间: 2023-07-12 21:43:22 浏览: 42
以下是一些实现新闻收藏的基本步骤: 1. 创建一个新的数据库类,用于创建和管理 SQLite 数据库和表。在该类中定义表和字段,以及增删改查等操作方法。 ``` public class NewsDBHelper extends SQLiteOpenHelper { private static final String DB_NAME = "news.db"; private static final int DB_VERSION = 1; public NewsDBHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); } @Override public void onCreate(SQLiteDatabase db) { String sql = "CREATE TABLE IF NOT EXISTS news " + "(_id INTEGER PRIMARY KEY AUTOINCREMENT, " + "title TEXT, " + "content TEXT, " + "url TEXT, " + "image_url TEXT, " + "is_favorite INTEGER DEFAULT 0)"; db.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // Upgrade database if necessary } public void addNews(News news) { SQLiteDatabase db = getWritableDatabase(); ContentValues values = new ContentValues(); values.put("title", news.getTitle()); values.put("content", news.getContent()); values.put("url", news.getUrl()); values.put("image_url", news.getImageUrl()); db.insert("news", null, values); db.close(); } public void removeNews(int id) { SQLiteDatabase db = getWritableDatabase(); db.delete("news", "_id=?", new String[]{String.valueOf(id)}); db.close(); } public void updateNews(News news) { SQLiteDatabase db = getWritableDatabase(); ContentValues values = new ContentValues(); values.put("title", news.getTitle()); values.put("content", news.getContent()); values.put("url", news.getUrl()); values.put("image_url", news.getImageUrl()); db.update("news", values, "_id=?", new String[]{String.valueOf(news.getId())}); db.close(); } public List<News> getFavoriteNews() { List<News> newsList = new ArrayList<>(); SQLiteDatabase db = getReadableDatabase(); Cursor cursor = db.query("news", null, "is_favorite=?", new String[]{"1"}, null, null, null); if (cursor != null) { while (cursor.moveToNext()) { int id = cursor.getInt(cursor.getColumnIndex("_id")); String title = cursor.getString(cursor.getColumnIndex("title")); String content = cursor.getString(cursor.getColumnIndex("content")); String url = cursor.getString(cursor.getColumnIndex("url")); String imageUrl = cursor.getString(cursor.getColumnIndex("image_url")); int isFavorite = cursor.getInt(cursor.getColumnIndex("is_favorite")); News news = new News(id, title, content, url, imageUrl, isFavorite == 1); newsList.add(news); } cursor.close(); } db.close(); return newsList; } public void setNewsFavorite(int id, boolean isFavorite) { SQLiteDatabase db = getWritableDatabase(); ContentValues values = new ContentValues(); values.put("is_favorite", isFavorite ? 1 : 0); db.update("news", values, "_id=?", new String[]{String.valueOf(id)}); db.close(); } } ``` 2. 在新闻列表界面中,显示新闻列表,并添加一个收藏按钮。当用户点击该按钮时,将该新闻的 ID 存入数据库中,并更新按钮的状态。 ``` public class NewsListActivity extends AppCompatActivity { private RecyclerView mRecyclerView; private NewsListAdapter mAdapter; private NewsDBHelper mDBHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_news_list); mRecyclerView = findViewById(R.id.recycler_view); mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); mAdapter = new NewsListAdapter(this); mRecyclerView.setAdapter(mAdapter); mDBHelper = new NewsDBHelper(this); List<News> newsList = getNewsList(); mAdapter.setNewsList(newsList); } private List<News> getNewsList() { // Get news list from API or other data source // ... } public void onFavoriteClick(int position) { News news = mAdapter.getNewsList().get(position); boolean isFavorite = !news.isFavorite(); news.setFavorite(isFavorite); mDBHelper.setNewsFavorite(news.getId(), isFavorite); mAdapter.notifyItemChanged(position); } } ``` 3. 在新闻详情界面中,显示新闻内容,并添加一个收藏按钮。当用户点击该按钮时,将该新闻的 ID 存入数据库中,并更新按钮的状态。 ``` public class NewsDetailActivity extends AppCompatActivity { private News mNews; private NewsDBHelper mDBHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_news_detail); mNews = getIntent().getParcelableExtra("news"); mDBHelper = new NewsDBHelper(this); TextView titleTextView = findViewById(R.id.title_text_view); TextView contentTextView = findViewById(R.id.content_text_view); ImageView imageView = findViewById(R.id.image_view); Button favoriteButton = findViewById(R.id.favorite_button); titleTextView.setText(mNews.getTitle()); contentTextView.setText(mNews.getContent()); Glide.with(this).load(mNews.getImageUrl()).into(imageView); boolean isFavorite = mNews.isFavorite(); favoriteButton.setText(isFavorite ? "取消收藏" : "收藏"); favoriteButton.setOnClickListener(v -> { isFavorite = !isFavorite; mNews.setFavorite(isFavorite); mDBHelper.setNewsFavorite(mNews.getId(), isFavorite); favoriteButton.setText(isFavorite ? "取消收藏" : "收藏"); }); } } ``` 4. 在新闻收藏列表界面中,加载已经收藏的新闻列表,并显示在列表中。 ``` public class FavoriteListActivity extends AppCompatActivity { private RecyclerView mRecyclerView; private NewsListAdapter mAdapter; private NewsDBHelper mDBHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_favorite_list); mRecyclerView = findViewById(R.id.recycler_view); mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); mAdapter = new NewsListAdapter(this); mRecyclerView.setAdapter(mAdapter); mDBHelper = new NewsDBHelper(this); List<News> newsList = mDBHelper.getFavoriteNews(); mAdapter.setNewsList(newsList); } } ``` 以上代码仅供参考,具体实现可以根据自己的需要进行调整和优化。

最新推荐

recommend-type

6-10.py

6-10
recommend-type

基于机器学习的入侵检测系统+源码+说明.zip

基于机器学习的入侵检测系统+源码+说明.zip
recommend-type

matlab基于潜在低秩表示的红外与可见光图像融合.zip

matlab基于潜在低秩表示的红外与可见光图像融合.zip
recommend-type

4-5.py

4-5
recommend-type

基于tensorflow使用简单线性回归实现波士顿房价预测源码.zip

基于tensorflow使用简单线性回归实现波士顿房价预测源码.zip
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

2. 通过python绘制y=e-xsin(2πx)图像

可以使用matplotlib库来绘制这个函数的图像。以下是一段示例代码: ```python import numpy as np import matplotlib.pyplot as plt def func(x): return np.exp(-x) * np.sin(2 * np.pi * x) x = np.linspace(0, 5, 500) y = func(x) plt.plot(x, y) plt.xlabel('x') plt.ylabel('y') plt.title('y = e^{-x} sin(2πx)') plt.show() ``` 运行这段
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。