Java魔匣 2023-04-22 15:59 采纳率: 100%
浏览 9
已结题

Android实现新闻分类

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

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-04-23 16:29
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 帮你找了个相似的问题, 你可以看下: 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();
              }
          }
      }
      

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月27日
  • 已采纳回答 5月19日
  • 创建了问题 4月22日

悬赏问题

  • ¥20 vx转账功能对方不能领取
  • ¥15 vue2+codemirror 运行后页面光标太大了
  • ¥15 pdfjs库如何在前端实现打印、旋转等功能
  • ¥15 combobox数据绑定问题
  • ¥15 maven打包时,为什么有的依赖打不进去包
  • ¥15 求复现机器学习文章一篇
  • ¥15 爬虫抓取数据|解析视频文本内容(相关搜索:自动化)
  • ¥15 combobox绑定值改变的问题
  • ¥15 from seleniumwire import webdriver 在抓取http://链接的时候会自动转https://这个怎么解决
  • ¥15 hive直连数据库模式插入mysql表数据失败(相关搜索:数据库)