软件工程日报(5.31)
今日学习内容:
package com.example.kj;
import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView;
import android.annotation.SuppressLint; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText;
import java.util.List;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
1private RecyclerView recyclerView;
2private EditText editTextSearch;
3private Button btnSearch, btnGetAll, btnNextPage;
4private PolicyAdapter adapter;
5private int currentPage = 1;
6private static final int PAGE_SIZE = 10;
7
8@SuppressLint("MissingInflatedId")
9@Override
10protected void onCreate(Bundle savedInstanceState) {
11 super.onCreate(savedInstanceState);
12 setContentView(R.layout.activity_main);
13
14 recyclerView = findViewById(R.id.recycler_view);
15 editTextSearch = findViewById(R.id.edit_text_search);
16 btnSearch = findViewById(R.id.btn_search);
17 btnGetAll = findViewById(R.id.btn_get_all);
18 btnNextPage = findViewById(R.id.btn_next_page);
19
20 btnSearch.setOnClickListener(this);
21 btnGetAll.setOnClickListener(this);
22 btnNextPage.setOnClickListener(this);
23
24
25 recyclerView.setLayoutManager(new LinearLayoutManager(this));
26 adapter = new PolicyAdapter(this);
27 recyclerView.setAdapter(adapter);
28
29 // 初始化加载第一页数据
30 loadPolicies(currentPage, PAGE_SIZE);
31}
32
33private void loadPolicies(int page, int pageSize) {
34 new Thread(() -> {
35 List<Policy> policies = PolicyDAO.queryByPage(page, pageSize);
36 runOnUiThread(() -> {
37 adapter.setData(policies);
38 adapter.notifyDataSetChanged();
39 });
40 }).start();
41}
42
43private void searchPolicies() {
44 String searchText = editTextSearch.getText().toString().trim();
45 if (!searchText.isEmpty()) {
46 new Thread(() -> {
47 List<Policy> policies = PolicyDAO.searchPolicies(searchText, "", "");
48 runOnUiThread(() -> {
49 adapter.setData(policies);
50 adapter.notifyDataSetChanged();
51 });
52 }).start();
53 }
54}
55
56private void getAllPolicies() {
57 new Thread(() -> {
58 List<Policy> allPolicies = PolicyDAO.queryAll();
59 runOnUiThread(() -> {
60 adapter.setData(allPolicies);
61 adapter.notifyDataSetChanged();
62 });
63 }).start();
64}
65
66@Override
67public void onClick(View v) {
68 switch (v.getId()) {
69 case R.id.btn_search:
70 searchPolicies();
71 break;
72 case R.id.btn_get_all:
73 getAllPolicies();
74 break;
75 case R.id.btn_next_page:
76 currentPage++;
77 loadPolicies(currentPage, PAGE_SIZE);
78 break;
79 }
80}
81
82// PolicyAdapter 类需要您自行创建,用于将Policy对象绑定到RecyclerView的每个item上
83// 并处理点击事件跳转到详情页面
} 添加一个功能,点击按钮btn_view_details跳转页面,调用getPolicyById方法,用WebView展示数据库中的test内容

为了实现您的需求,您需要进行以下步骤:
- 添加按钮: 首先,在您的布局文件
activity_main.xml
中添加一个新的按钮用于查看详细信息。
1<Button
2 android:id="@+id/btn_view_details"
3 android:layout_width="wrap_content"
4 android:layout_height="wrap_content"
5 android:text="View Details"
6 app:layout_constraintBottom_toBottomOf="parent"
7 app:layout_constraintEnd_toEndOf="parent"
8 app:layout_constraintStart_toStartOf="parent"
9 app:layout_constraintTop_toBottomOf="@id/recycler_view" />
-
实现点击事件: 在
MainActivity.java
中为新添加的按钮注册点击事件,并在onClick
方法中处理逻辑。 -
定义getPolicyById方法: 假设
PolicyDAO
类有一个方法可以按ID获取单个政策详情,如果尚未存在,请定义这个方法。 -
创建详情Activity: 创建一个新的Activity(例如
PolicyDetailActivity
)用于显示政策的详细信息。在这个Activity中使用WebView来展示从数据库获取的HTML格式的政策内容。 -
传递数据到详情页面: 使用Intent传递政策ID到
PolicyDetailActivity
,并在该Activity中获取并展示详情。
下面是这些步骤的代码示例:
MainActivity.java 添加按钮点击事件及处理逻辑:
1// 在onClick方法中添加新的case处理
2case R.id.btn_view_details:
3 // 假设选中项是recyclerView的第一个条目,实际应用中您可能需要根据用户选择动态获取
4 Policy selectedPolicy = adapter.getData().get(0); // 需要适配实际情况
5 Intent intent = new Intent(MainActivity.this, PolicyDetailActivity.class);
6 intent.putExtra("policy_id", selectedPolicy.getId()); // 假设Policy类有getId()方法
7 startActivity(intent);
8 break;
PolicyDAO.java 添加或确认getPolicyById方法的存在:
1public static Policy getPolicyById(int policyId) {
2 // 实现按ID查询单个Policy的逻辑,返回Policy对象
3}
PolicyDetailActivity.java 创建并设置WebView以展示政策详情:
1public class PolicyDetailActivity extends AppCompatActivity {
2
3 private WebView webViewPolicyDetails;
4
5 @Override
6 protected void onCreate(Bundle savedInstanceState) {
7 super.onCreate(savedInstanceState);
8 setContentView(R.layout.activity_policy_detail);
9
10 webViewPolicyDetails = findViewById(R.id.web_view_policy_details);
11 webViewPolicyDetails.getSettings().setJavaScriptEnabled(true); // 如果需要支持JavaScript
12
13 Intent intent = getIntent();
14 int policyId = intent.getIntExtra("policy_id", -1);
15
16 if (policyId != -1) {
17 Policy policy = PolicyDAO.getPolicyById(policyId);
18 // 假设Policy对象有个getContent()方法返回HTML格式的政策内容
19 String content = policy.getContent();
20 webViewPolicyDetails.loadDataWithBaseURL(null, content, "text/html", "UTF-8", null);
21 }
22 }
23}
activity_policy_detail.xml 布局文件:
1<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 android:layout_width="match_parent"
3 android:layout_height="match_parent"
4 android:orientation="vertical">
5
6 <WebView
7 android:id="@+id/web_view_policy_details"
8 android:layout_width="match_parent"
9 android:layout_height="match_parent"/>
10
11</LinearLayout>
请确保根据您的具体需求调整上述代码示例,比如如何确定用户选择的政策项、处理可能的空值情况等。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律