第一排按钮
下边是一个listview
还有一个activity里面是新闻格式
这三个进行网络资源获取
实现点击按钮页面内容进行切换。
Android实现新闻分类
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
关注 不知道你这个问题是否已经解决, 如果还没有解决的话:- 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/296
- 你也可以参考下这篇文章:点击listview条目跳转到另一个Activity
- 除此之外, 这篇博客: android:将字符串分割成数组,并且写入listview中的 2.创建一个适配器,也可以写在activity里面 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
class vod_class_A extends BaseAdapter implements ListAdapter { private ArrayList<vod_class_C> vod_class_cs; private int id; private Context context; private LayoutInflater inflater; public vod_class_A(int subpage_item, ClassifyActivity context, ArrayList<vod_class_C> vod_class_cs) { this.vod_class_cs = vod_class_cs; this.context = context; this.id = subpage_item; inflater = LayoutInflater.from(context); } @Override public int getCount() { return vod_class_cs.size(); } @Override public Object getItem(int i) { return vod_class_cs.get(i); } @Override public long getItemId(int i) { return i; } @SuppressLint("WrongConstant") @Override public View getView(int i, View view, ViewGroup viewGroup) { TextView class_txt = null; TextView pgcount = null; vod_class_A.ViewHolder viewHolder; if (view == null) { view = inflater.inflate(id, null); class_txt = (TextView) view.findViewById(R.id.tv_str); view.setTag(new ViewHolder(class_txt)); } else { vod_class_A.ViewHolder viewHolder1 = (vod_class_A.ViewHolder) view.getTag(); // 重新获取ViewHolder class_txt = viewHolder1.class_txt; } vod_class_C vcs = (vod_class_C) vod_class_cs.get(i); // 获取当前项的实例 class_txt.setText(vcs.getClass_txt().toString()); return view; } private final class ViewHolder { TextView class_txt = null; public ViewHolder(TextView class_txt) { this.class_txt = class_txt; } } }
- 以下回答来自chatgpt:
针对问题中的需求,可以按照以下步骤实现:
-
实现新闻分类可以考虑使用RecyclerView,结合不同的Adapter可以展示不同的分类。RecyclerView可以从网络中获取数据,并结合Adapter将数据展示在列表中。
-
第一排按钮可以用一个横向的RecyclerView实现,每个按钮可以用一个自定义的布局文件来展示,例如底部带有一条红色的横线。按钮的点击事件可以通过RecyclerView的ItemClickListener来处理,点击后通过判断获取对应的Adapter来切换列表展示内容。
-
新闻格式的Activity可以用一个WebView实现,从网络中获取相应的数据并通过WebView加载展示即可。在主界面中点击列表项可以将新闻链接传递到新闻格式的Activity中,在WebView中展示相应的页面。
具体实现细节可以参考以下代码示例:
布局文件:activity_main.xml
<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/rv_category" android:layout_width="match_parent" android:layout_height="wrap_content"/> <androidx.recyclerview.widget.RecyclerView android:id="@+id/rv_news" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"/> </LinearLayout>
代码示例:
MainActivity.java
public class MainActivity extends AppCompatActivity { private RecyclerView rvCategory; private RecyclerView rvNews; private List<Category> categoryList; private List<News> newsList; private CategoryAdapter categoryAdapter; private NewsAdapter newsAdapter; private WebViewActivity webViewActivity; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); rvCategory = findViewById(R.id.rv_category); rvNews = findViewById(R.id.rv_news); // 初始化分类数据和新闻列表数据,可以从网络中获取 initData(); // 初始化分类列表 initCategoryAdapter(); // 初始化新闻列表 initNewsAdapter(); // 初始化WebViewActivity,用于展示新闻内容 webViewActivity = new WebViewActivity(); } // 初始化分类数据和新闻列表数据 private void initData() { // ... } // 初始化分类列表 private void initCategoryAdapter() { // 构造CategoryAdapter,用于展示分类列表 categoryAdapter = new CategoryAdapter(categoryList); // 设置分类列表项的点击事件 categoryAdapter.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(View view, int position) { // 切换新闻列表的Adapter,展示对应分类下的新闻列表 newsAdapter.setData(newsList.get(position).getNewsList()); } }); // 设置分类列表的LayoutManager和Adapter LinearLayoutManager layoutManager = new LinearLayoutManager(this); layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); rvCategory.setLayoutManager(layoutManager); rvCategory.setAdapter(categoryAdapter); } // 初始化新闻列表 private void initNewsAdapter() { // 构造NewsAdapter,用于展示新闻列表 newsAdapter = new NewsAdapter(newsList.get(0).getNewsList()); // 设置新闻列表项的点击事件 newsAdapter.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(View view, int position) { // 获取对应的新闻链接,传递到WebViewActivity中展示 String newsUrl = newsAdapter.getData().get(position).getNewsUrl(); webViewActivity.showWebView(MainActivity.this, newsUrl); } }); // 设置新闻列表的LayoutManager和Adapter LinearLayoutManager layoutManager = new LinearLayoutManager(this); rvNews.setLayoutManager(layoutManager); rvNews.setAdapter(newsAdapter); } }
CategoryAdapter.java
public class CategoryAdapter extends RecyclerView.Adapter<CategoryAdapter.ViewHolder> { private List<Category> categoryList; private OnItemClickListener onItemClickListener; public CategoryAdapter(List<Category> categoryList) { this.categoryList = categoryList; } public void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.onItemClickListener = onItemClickListener; } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_category, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { Category category = categoryList.get(position); holder.tvCategory.setText(category.getCategoryName()); if (category.isSelected()) { holder.tvCategory.setTextColor(Color.RED); holder.line.setVisibility(View.VISIBLE); } else { holder.tvCategory.setTextColor(Color.BLACK); holder.line.setVisibility(View.GONE); } holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 处理分类列表项的点击事件 for (Category c : categoryList) { c.setSelected(false); } category.setSelected(true); notifyDataSetChanged(); if (onItemClickListener != null) { onItemClickListener.onItemClick(v, position); } } }); } @Override public int getItemCount() { return categoryList.size(); } static class ViewHolder extends RecyclerView.ViewHolder { TextView tvCategory; View line; ViewHolder(@NonNull View itemView) { super(itemView); tvCategory = itemView.findViewById(R.id.tv_category); line = itemView.findViewById(R.id.line); } } }
NewsAdapter.java
public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.ViewHolder> { private List<NewsItem> newsItemList; private OnItemClickListener onItemClickListener; public NewsAdapter(List<NewsItem> newsItemList) { this.newsItemList = newsItemList; } public void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.onItemClickListener = onItemClickListener; } public void setData(List<NewsItem> newsItemList) { this.newsItemList = newsItemList; notifyDataSetChanged(); } public List<NewsItem> getData() { return newsItemList; } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_news, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { NewsItem newsItem = newsItemList.get(position); holder.tvTitle.setText(newsItem.getTitle()); holder.tvContent.setText(newsItem.getContent()); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 处理新闻列表项的点击事件 if (onItemClickListener != null) { onItemClickListener.onItemClick(v, position); } } }); } @Override public int getItemCount() { return newsItemList.size(); } static class ViewHolder extends RecyclerView.ViewHolder { TextView tvTitle; TextView tvContent; ViewHolder(@NonNull View itemView) { super(itemView); tvTitle = itemView.findViewById(R.id.tv_title); tvContent = itemView.findViewById(R.id.tv_content); } } }
WebViewActivity.java
public class WebViewActivity extends AppCompatActivity { private WebView webView; public void showWebView(Context context, String url) { Intent intent = new Intent(context, WebViewActivity.class); intent.putExtra("url", url); context.startActivity(intent); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_web_view); webView = findViewById(R.id.web_view); // 从Intent中获取要展示的新闻链接 String url = getIntent().getStringExtra("url"); webView.loadUrl(url); } @Override public void onBackPressed() { // 按下返回键时返回上一级页面,而不是退出应用 if (webView.canGoBack()) { webView.goBack(); } else { super.onBackPressed(); } } }
-
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥30 STM32 INMP441无法读取数据
- ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
- ¥15 用visualstudio2022创建vue项目后无法启动
- ¥15 x趋于0时tanx-sinx极限可以拆开算吗
- ¥500 把面具戴到人脸上,请大家贡献智慧
- ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
- ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
- ¥30 c#打开word开启修订并实时显示批注
- ¥15 如何解决ldsc的这条报错/index error
- ¥15 VS2022+WDK驱动开发环境