安卓第二次实验报告:activity的点击跳转事件

安卓第二次实验报告:activity的点击跳转事件,第1张

安卓第二次实验报告:activity的点击跳转事件 1.实验环境:

Windows系统,Android Studio

2.界面分析:

这是我们的开始界面,我们选择在“发现”的地方放置新闻,做一个activity的跳转。

这是我们点击“发现”中的新闻后的跳转界面,是用另一个activity实现的。

 3.界面的代码实现:  3.1 recycler_view2.xml文件(“发现”界面的recyclerview设计)



    

    

我们的recyclerview设置的内容是一个图片展示新闻的图片,然后旁边一个textview显示新闻的主题,这里设置的图片和文字是默认的,我们会在初始化数据的时候进行数据的修改。


3.2 五个新闻的activity.xml文件(这里只展示一个,其他四个的除了图片和文字,其他相同)



    
    


        
        

    
    

        
    



因为我们在设置图片大小和位置的时候设置了图片的大小为指定的大小,所以,如果我们在与其同在的linearLayout中用textview写我们的新闻主体,新闻的有些内容不会显示。因此,我们选择使用一个ScrollView来放我们的新闻textview,这样我们的新闻内容就不会显示不完全。这样往下拖动的时候只有内容主体在动,我们的主题和图片不会变化。

3.3 News.java文件

public class News {
    private int imageId;
    private String newsname;

    public int getImageId() {
        return imageId;
    }

    public void setImageId(int imageId) {
        this.imageId = imageId;
    }

    public String getUsername() {
        return newsname;
    }

    public void setUsername(String username) {
        this.newsname = username;
    }

    public News(int imageId, String username) {
        this.imageId = imageId;
        this.newsname = username;
    }
}

recycler_view2.xml文件中对应的一栏数据的实体类。

3.4 MyRecyclerAdapter.java文件
public class MyRecyclerApapter2 extends RecyclerView.Adapter{
    private Context context;
    private ArrayList news;
    private View inflater;
    List lists = new ArrayList<>();

    public MyRecyclerApapter2(Context context, ArrayList news) {
        this.context = context;
        this.news = news;
    }

//    @NonNull
@Override
public MyVIewHolder2 onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    //创建ViewHolder。返回每一项的布局
    inflater = LayoutInflater.from(context).inflate(R.layout.recycler_view2,parent,false);
    MyVIewHolder2 myVIewHolder = new MyVIewHolder2(inflater);
    lists.add(new Intent(context, News1.class));
    lists.add(new Intent(context, News2.class));
    lists.add(new Intent(context, News3.class));
    lists.add(new Intent(context, News4.class));
    lists.add(new Intent(context, News5.class));
    return myVIewHolder;
}

    @Override
    public void onBindViewHolder(@NonNull MyVIewHolder2 holder, @SuppressLint("RecyclerView") int position) {
        holder.text.setText("" + news.get(position).getUsername());
        holder.image.setImageResource(news.get(position).getImageId());
        holder.text.setonClickListener(new View.onClickListener() {
            @Override
            public void onClick(View v) {
                context.startActivity(lists.get(position));
            }
        });
    }

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

    class MyVIewHolder2 extends RecyclerView.ViewHolder{
        TextView text;
        ImageView image;
        //初始化控件
        public MyVIewHolder2(@NonNull View itemView) {
            super(itemView);
            text = itemView.findViewById(R.id.textView7);
            image = itemView.findViewById(R.id.imageView2);
        }
    }
}

我们在该类中定义了一个Intent的列表,用于存放我们的各个activity的类别。我们按照新闻的顺序添加intent,这样我们在onBindViewHolder方法中可以通过该方法的position参数来获取各个新闻对应intent,然后通过context.startActivity()来进行不同activity的转换。

3.5 DiscoverFragment.java文件
public class DiscoverFragment extends Fragment {
    private RecyclerView recyclerView;
    private Context context;

    private MyRecyclerApapter2 myRecyclerApapter2;
    private ArrayList news = new ArrayList();


    public DiscoverFragment() {
    }

    private void initData(){
        news.add(new News(R.drawable.news1,"美国四部门发气候变化报告:各国竞争将加剧,太阳能地球工程成热门"));
        news.add(new News(R.drawable.news2,"母象生来没有象牙,这种“进化”让人心塞"));
        news.add(new News(R.drawable.news3_1,"学历的尽头,是当个深圳老师"));
        news.add(new News(R.drawable.news4,"袁老遗愿实现了:亩产1326.77公斤,我国水稻单产再创纪录!"));
        news.add(new News(R.drawable.news5,"贵州公安厅“土皇帝”被查后自白:我在系统内一跺脚,地也要抖三抖"));
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_discover,container,false);
        context = this.getActivity();
        recyclerView = view.findViewById(R.id.RecyclerView2);
        initData();
        myRecyclerApapter2 = new MyRecyclerApapter2(context, news);
        LinearLayoutManager layoutManager = new LinearLayoutManager(context);
        layoutManager.setOrientation(RecyclerView.VERTICAL);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setAdapter(myRecyclerApapter2);

        //添加分隔线
        recyclerView.addItemDecoration(new MyDecoration2(context, MyDecoration.VERTICAL_LIST,news));


        return view;
//        return null;
    }
}

在这个类中我们初始化了recycler_view2.xml文件中的不同列的数据。最后返回我们创建的包含了recyclerView组件的xml文件界面。

4.activity的生命周期

Activity 在生命周期中共存在三个状态,这三个状态如下:

1) 运行态

指 Activity 运行于屏幕的最上层并且获得了用户焦点。

2) 暂停态

指当前 Activity 依然存在,但是没有获得用户焦点。

在其之上有其他的 Activity 处于运行态,但是由于处于运行态的 Activity 没有遮挡住整个屏幕,当前 Activity 有一部分视图可以被用户看见。处于暂停态的 Activity 保留了自己所使用的内存和用户信息,但是在系统极度缺乏资源的情况下,有可能会被杀死以释放资源。

3) 停止态

指当前 Activity 完全被处于运行态的 Activity 遮挡住,其用户界面完全不能被用户看见。

处于停止态的 Activity 依然存活,也保留了自己所使用的内存和用户信息,但是一旦系统缺乏资源,停止态的 Activity 就会被杀死以释放资源。

activity的回调方法有以下7种:

1.onCreate(Bundle savedInstanceState) 

2.onStart()

3.onResume()

4.onPause()

5.onStop()

6.onRestart()

7.onDestroy()

启动 Activity:在这个阶段依次执行 3 个生命周期方法:onCreate、onStart 和 onResume。

Activity 失去焦点:如果在 Activity 获得焦点的情况下进入其他的 Activity 或应用程序,这时当前的 Activity 会失去焦点。在这一阶段,会依次执行 onPause 和 onStop 方法。

Activity 重获焦点:如果 Activity 重新获得焦点,会依次执行 3 个生命周期方法:onRestart、onStart 和 onResume。

关闭 Activity:当 Activity 被关闭时,系统会依次执行 3 个生命周期方法:onPause、onStop 和 onDestroy。

5.实验小结

        通过本次实验,熟悉了各个activity之间的转换过程,也更加懂得了activity的各种状态及其生命周期还有期间其调用的方法。

点击查看我的源码

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4746646.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-08
下一篇 2022-11-08

发表评论

登录后才能评论

评论列表(0条)

保存