安卓实验二 我的头条 【答辩版】 适合入门了解知识

主要就是1.主活动类,2.需要去gradle引入要使用的包比如recycler,3.需要去注册文件注册主活动,才能正常运行App,4.需要res/layout中的主布局文件来配合代码中的view类来显示我们界面。

建议先从课本上了解下要使用的控件即相关功能和实现,然后不懂的每一句都去问ChatGpt

目录

效果:

代码分析:

活动:

参考上方列表的适配器代码: 


效果:

上面横栏图片是我下载存到本地draw文件夹的图片。

下方新闻列表的图片用的是Picasso显示的URL。

目前每个分类更换下面的碎片成为的Recycler都是写死的。

比如Sports,下面的第一个项被我替换为了别的。经测试可以正常替换。

每个元素都是按钮,包括下面的文字图片。都有Toast响应。

代码分析:

Gradle中引入需要用的外部包,并及时sync

注册文件中注册了主活动,并且声明了访问网络的权限:

主布局中安排了最上方的横向列表和下面的碎片:

0dp指的是交给系统自己分配合适的空间大小。

无论是上方的选项还是下面的列表选项,每个选项都是单独的LinearLayout

上方布局:

使用”fitXY”可以使我的图片适应填充满目标区域

下方每项布局:

使用了singleLine = “flase” ,当文本足够长时,会自动换行。

活动:

主活动:

元素类:

就是简单的成员,构造,以及get

适配器Adapter:

这里重要的就是想给下面碎片更换,需要获取主活动,才能通过

getSupportFragmentManager()来获取碎片管理器。

类内类有ViewHolder,用来实现视图中显示每项元素的。

其余部分类似课本碎片节相关代码。

其中按钮功能:

获取到点击位置的元素,可以得到其结构体,就可以根据名字的不同来替换不同的下方列表碎片。

下方列表几乎和这个列表相同,只是做了些调整:

每个列表都有独立的实现。

Business的构造:

第一个图片的URL:

https://img0.baidu.com/it/u=743086653,3308529542&fm=253&fmt=auto&app=120&f=JPEG?w=539&h=305

本地drawable的图片:

参考上方列表的适配器代码: 

修改自《第一行代码 第二版》中动态创建碎片一节

package com.example.myapplication2;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import androidx.recyclerview.widget.RecyclerView;

import androidx.fragment.app.Fragment;

import java.util.List;

public class NewsClassAdapter extends RecyclerView.Adapter<NewsClassAdapter.ViewHolder>{
    private List<NewsClass>mNCList;
    private FragmentActivity mActivity;

    static class ViewHolder extends RecyclerView.ViewHolder{
        View fruitView;
        ImageView NCImage;
        TextView NCName;
        public ViewHolder(View view){
            super(view);
            fruitView = view;
            NCImage = (ImageView) view.findViewById(R.id.nc_image);
            NCName = (TextView) view.findViewById(R.id.nc_name);
        }
    }

    public NewsClassAdapter(List<NewsClass> NClist,FragmentActivity activity)
    {
        mNCList = NClist;
        mActivity = activity;
    }
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent,int viewType)
    {
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.new_class_item,parent,false);
        final ViewHolder holder = new ViewHolder(view);
        holder.fruitView.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                int position = holder.getAdapterPosition();
                NewsClass nc = mNCList.get(position);
                Toast.makeText(v.getContext(),"you clicked view " + nc.getName(),Toast.LENGTH_LONG).show();


                if(nc.getName() == "Business")
                    replaceFragment(new BusinessFragment());
                if(nc.getName() == "Entertainment")
                    replaceFragment(new Entertainment());
                if(nc.getName() == "Health")
                    replaceFragment(new Health());
                if(nc.getName() == "Science")
                    replaceFragment(new Science());
                if(nc.getName() == "Sports")
                    replaceFragment(new Sports());
            }
        });
        holder.NCImage.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v)
            {
                int position = holder.getAdapterPosition();
                NewsClass nc = mNCList.get(position);
                //replaceFragment(new BusinessFragment());
                Toast.makeText(v.getContext(),"you clicked image " + nc.getName(),Toast.LENGTH_LONG).show();


                if(nc.getName() == "Business")
                    replaceFragment(new BusinessFragment());
                if(nc.getName() == "Entertainment")
                    replaceFragment(new Entertainment());
                if(nc.getName() == "Health")
                    replaceFragment(new Health());
                if(nc.getName() == "Science")
                    replaceFragment(new Science());
                if(nc.getName() == "Sports")
                    replaceFragment(new Sports());
            }
        });



        return holder;
    }

    private void replaceFragment(Fragment fragment)
    {
        FragmentManager fragmentManager = mActivity.getSupportFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.replace(R.id.list, fragment);
        transaction.addToBackStack(null);
        transaction.commit();
    }

    @Override
    public void onBindViewHolder(ViewHolder holder,int position){
        NewsClass nc = mNCList.get(position);
        holder.NCImage.setImageResource(nc.getImageId());
        holder.NCName.setText(nc.getName());
    }

    @Override
    public int getItemCount(){
        return mNCList.size();
    }
}

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值