第一排按钮
下边是一个listview
还有一个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;
}
}
}
针对问题中的需求,可以按照以下步骤实现:
实现新闻分类可以考虑使用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();
}
}
}