Android实现新闻分类

第一排按钮
下边是一个listview
还有一个activity里面是新闻格式
这三个进行网络资源获取
实现点击按钮页面内容进行切换。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: 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:

    针对问题中的需求,可以按照以下步骤实现:

    1. 实现新闻分类可以考虑使用RecyclerView,结合不同的Adapter可以展示不同的分类。RecyclerView可以从网络中获取数据,并结合Adapter将数据展示在列表中。

    2. 第一排按钮可以用一个横向的RecyclerView实现,每个按钮可以用一个自定义的布局文件来展示,例如底部带有一条红色的横线。按钮的点击事件可以通过RecyclerView的ItemClickListener来处理,点击后通过判断获取对应的Adapter来切换列表展示内容。

    3. 新闻格式的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();
            }
        }
    }
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^