AS二次作业

编程入门 行业动态 更新时间:2024-10-28 06:33:34

AS二次<a href=https://www.elefans.com/category/jswz/34/1771149.html style=作业"/>

AS二次作业

#作业目标


在作业一的基础上,将 recyclerView 的每个 item 增加点击功能,点击后跳转到一个新的 view 展示信息。

#技术说明

Android Studio Giraffe | 2022.3.1 Patch 2
Build #AI-223.8836.35.2231.10811636, built on September 15, 2023
Runtime version: 17.0.6+0-b2043.56-10027231 amd64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
Windows 11 10.0
GC: G1 Young Generation, G1 Old Generation
Memory: 1280M
Cores: 8
Registry:
    external.system.auto.import.disabled=true
    ide.text.editor.with.preview.show.floating.toolbar=false

#关键代码

#新建item样式设计文件——song_item.xml

在layout下新建一个xml文件song_item.xml,在此文件下设计每个item的样式。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=""xmlns:app=""android:layout_width="match_parent"android:layout_height="wrap_content"><ImageViewandroid:id="@+id/imageS"android:layout_width="177dp"android:layout_height="47dp"android:layout_marginTop="15dp"android:layout_marginRight="20dp"android:layout_weight="1"app:srcCompat="@drawable/no1" /><TextViewandroid:id="@+id/textViewS"android:layout_width="118dp"android:layout_height="39dp"android:layout_marginTop="15dp"android:layout_weight="1"android:gravity="left"android:text="TextView"android:textSize="24sp" /></LinearLayout>

#新建xml文件设计点击后的页面样式——activity_blank_gragment2_detail.xml

在layout里新建一个xml文件activity_blank_gragment2_detail.xml,设计点击后的具体页面信息,包括歌手照片、歌名、专辑、风格等,并添加一个button——返回按钮,实现返回页面的操作。

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=""xmlns:app=""xmlns:tools=""android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".BlankFragment2_Detail"><LinearLayoutandroid:id="@+id/linearLayout2"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"tools:ignore="MissingConstraints"></LinearLayout><ImageViewandroid:id="@+id/imageDetail"android:layout_width="204dp"android:layout_height="228dp"android:layout_weight="0"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"tools:srcCompat="@tools:sample/avatars" /><LinearLayoutandroid:id="@+id/linearLayout4"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"tools:ignore="MissingConstraints"></LinearLayout><LinearLayoutandroid:id="@+id/linearLayout3"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"tools:ignore="MissingConstraints"></LinearLayout><LinearLayoutandroid:id="@+id/linearLayout"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"tools:ignore="MissingConstraints"></LinearLayout><Buttonandroid:id="@+id/returnButton"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="center"android:text="返回"android:textSize="35sp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.0"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/imageDetail"app:layout_constraintVertical_bias="1.0" /><TextViewandroid:id="@+id/song2"android:layout_width="69dp"android:layout_height="62dp"android:layout_weight="1"android:text="未知"android:textSize="26sp"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.046"app:layout_constraintStart_toStartOf="parent"tools:layout_editor_absoluteY="0dp"tools:ignore="MissingConstraints" /><TextViewandroid:id="@+id/wxtag2"android:layout_width="105dp"android:layout_height="54dp"android:layout_weight="1"android:text="未分类"android:textSize="26sp"app:layout_constraintBottom_toTopOf="@+id/imageDetail"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent" /><TextViewandroid:id="@+id/textDetail"android:layout_width="292dp"android:layout_height="86dp"android:layout_weight="3"android:gravity="center"android:text="歌曲名"android:textSize="35sp"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"tools:layout_editor_absoluteY="62dp"tools:ignore="MissingConstraints" /><TextViewandroid:id="@+id/songer2"android:layout_width="148dp"android:layout_height="54dp"android:layout_weight="1"android:text="未知"android:textSize="26sp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.498"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/imageDetail"app:layout_constraintVertical_bias="0.239" /></androidx.constraintlayout.widget.ConstraintLayout>

#新建MyAdapter类

创建Adapter类,实现数据绑定到recycleview中对应的item上。

package com.example.myapplication2;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;import java.util.List;
import java.util.Map;public class Myadapter extends RecyclerView.Adapter <Myadapter.Myholder> {private List<Map<String,Object>> mydata;private Context mycontext;public Myadapter(List<Map<String,Object>> data, Context context) {mydata=data;mycontext=context;}@NonNull@Overridepublic Myholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View view=LayoutInflater.from(mycontext).inflate(R.layout.song_item,parent,false);Myholder myholder=new Myholder(view);return myholder;}@Overridepublic void onBindViewHolder(@NonNull Myadapter.Myholder holder, int position) {String name=mydata.get(position).get("i_name").toString();int image=Integer.parseInt(mydata.get(position).get("i_image").toString());String songer=mydata.get(position).get("i_songer").toString();String song=mydata.get(position).get("i_song").toString();String tag=mydata.get(position).get("i_tag").toString();holder.textView.setText(name);holder.imageView.setImageResource(image);holder.textView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent=new Intent(mycontext, BlankFragment2_Detail.class);intent.putExtra("details",name);intent.putExtra("image",image);intent.putExtra("songer",songer);intent.putExtra("song",song);intent.putExtra("tag",tag);intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//开始跳转mycontext.startActivity(intent);}});}@Overridepublic int getItemCount() {return mydata.size();}public class Myholder extends RecyclerView.ViewHolder{private TextView textView;private ImageView imageView;public Myholder(@NonNull View itemView){super(itemView);textView=itemView.findViewById(R.id.textViewS);imageView=itemView.findViewById(R.id.imageS);}}
}

#按作业内容对BlankFragment2修改

这次作业的内容是歌曲简介页面,因此需要更多的数据填充,实现页面的美观与完善。

package com.example.myapplication2;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class BlankFragment2 extends Fragment {private RecyclerView recyclerView;private Myadapter myadapter;@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View view=inflater.inflate(R.layout.fragment_blank_fragment2, container, false);recyclerView=view.findViewById(R.id.recycleview);//创建数据String[] names={"稻香" ,"江南","生日快乐","小霞","生活因你而火热","李白","公路之歌","斑马斑马"};int[] images={R.drawable.no1, R.drawable.no2, R.drawable.no3, R.drawable.no4,R.drawable.no5,R.drawable.no6,R.drawable.no7,R.drawable.no8};String[] composer={"周杰伦","林俊杰","金玟岐","黄绮珊","痛仰", "李荣浩","新裤子","宋东野"};String[] album={"魔杰座","第二天堂","生日快乐","小霞","生活因你而火热","模特","不要停止我的音乐","安和桥北"};String[] tags={"华语","华语","治愈","流行","流行","乡村摇滚","摇滚","民谣"};List<Map<String,Object>> items=new ArrayList<Map<String,Object>>();for(int i=0;i<names.length;i++){Map<String,Object> item=new HashMap<String, Object>();item.put("i_name",names[i]);item.put("i_image",images[i]);item.put("i_songer",composer[i]);item.put("i_song",album[i]);item.put("i_tag",tags[i]);items.add(item);}//创建RecycleView实例和设置AdapterContext context=getContext();myadapter=new Myadapter(items,context);LinearLayoutManager manager=new LinearLayoutManager(context);manager.setOrientation(recyclerView.VERTICAL);recyclerView.setLayoutManager(manager);recyclerView.setAdapter(myadapter);//实现拖拽和左滑删除效果ItemTouchHelper itemTouchHelper=new ItemTouchHelper(new ItemTouchHelper.Callback() {@Overridepublic int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {int swiped=ItemTouchHelper.LEFT;int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;return makeMovementFlags(dragFlags,swiped);}@Overridepublic boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {int oldPosition = viewHolder.getAdapterPosition();int newPosition = target.getAdapterPosition();if (oldPosition < newPosition) {for (int i = oldPosition; i < newPosition; i++) {// 改变数据集Collections.swap(items, i, i +1);}} else {for (int i = oldPosition; i > newPosition; i--) {// 改变数据集Collections.swap(items, i, i - 1);}}myadapter.notifyItemMoved(oldPosition, newPosition);return true;}@Overridepublic void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {int position = viewHolder.getAdapterPosition();items.remove(position);myadapter.notifyItemRemoved(position);}@Overridepublic void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {if (actionState!= ItemTouchHelper.ACTION_STATE_IDLE){viewHolder.itemView.setBackgroundColor(Color.parseColor("#04BE02"));}}@Overridepublic void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {super.clearView(recyclerView, viewHolder);viewHolder.itemView.setBackgroundColor(Color.TRANSPARENT);}});//关联recycleViewitemTouchHelper.attachToRecyclerView(recyclerView);return view;}}

#新建BlankFragment2_Detail.java——实现item跳转

通过BlankFragment2_Detail.java将数据传送给MyAdapter,从而实现跳转。

package com.example.myapplication2;import androidx.appcompat.app.AppCompatActivity;import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;public class BlankFragment2_Detail extends AppCompatActivity {TextView dName,textView1,textView2,textView3;ImageView dImage;Button button_r;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_blank_fragment2_detail);Intent intent=getIntent();dName=findViewById(R.id.textDetail);dImage=findViewById((R.id.imageDetail));dImage.setImageResource(intent.getIntExtra("image",R.drawable.me));dName.setText(intent.getStringExtra("details"));textView1=findViewById(R.id.songer2);textView2=findViewById(R.id.song2);textView3=findViewById(R.id.wxtag2);textView1.setText(intent.getStringExtra("songer"));textView2.setText(intent.getStringExtra("song"));textView3.setText(intent.getStringExtra("tag"));button_r=findViewById(R.id.returnButton);button_r.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Intent intent = new Intent();setResult(123,intent);finish();}});}
}

#作品效果

效果实现

视频无法播放请点击链接:实现效果-CSDN直播 

#源代码仓库

fuzengyu/AS2 (github.codianji

更多推荐

AS二次作业

本文发布于:2024-02-11 04:45:24,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1679184.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:作业

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!