实验五 Android Studio 高级 UI

一、实验目的

深入学习Fragment的用法,自定义列表视图的实现。

二、实验要内容

实现一个班级名单的列表视图

  1. 每个列表项包含:个人照片,学号和姓名,电话;

  2. 可以删除列表项,添加列表项;

  3. 可以从列表项拨打对应的电话号码。

三、结构搭建

三、代码实现

  activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/fragment_list"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">


</androidx.constraintlayout.widget.ConstraintLayout>

  fragment_listxml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".ListFragment">

    <EditText
        android:id="@+id/edit_id"
        android:layout_width="wrap_content"
        android:layout_height="35dp"
        android:layout_marginStart="28dp"
        android:layout_marginTop="16dp"
        android:ems="10"
        android:hint="Please input id"
        android:inputType="text"
        android:textSize="13sp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/edit_name"
        android:layout_width="wrap_content"
        android:layout_height="35dp"
        android:layout_marginTop="8dp"
        android:ems="10"
        android:hint="Please input name"
        android:inputType="text"
        android:textSize="13sp"
        app:layout_constraintStart_toStartOf="@+id/edit_id"
        app:layout_constraintTop_toBottomOf="@+id/edit_id" />

    <EditText
        android:id="@+id/edit_tel"
        android:layout_width="wrap_content"
        android:layout_height="35dp"
        android:layout_marginTop="8dp"
        android:ems="10"
        android:hint="Please input phone"
        android:inputType="text"
        android:textSize="13sp"
        app:layout_constraintStart_toStartOf="@+id/edit_name"
        app:layout_constraintTop_toBottomOf="@+id/edit_name" />

    <Button
        android:id="@+id/btn_commit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="84dp"
        android:layout_marginTop="52dp"
        android:text="submit"
        app:layout_constraintStart_toEndOf="@+id/edit_name"
        app:layout_constraintTop_toTopOf="parent" />

    <ListView
        android:id="@+id/lv_stu"
        android:layout_width="match_parent"
        android:layout_height="592dp"
        android:layout_marginTop="36dp"
        app:layout_constraintTop_toBottomOf="@+id/btn_commit"
        tools:layout_editor_absoluteX="0dp" />
</androidx.constraintlayout.widget.ConstraintLayout>

  list_item_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="75dp">
    
    <TextView
        android:id="@+id/tv_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="36dp"
        android:text="TextView"
        app:layout_constraintStart_toEndOf="@+id/imageView"
        app:layout_constraintTop_toTopOf="@+id/imageView" />

    <TextView
        android:id="@+id/tv_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:text="TextView"
        app:layout_constraintStart_toStartOf="@+id/tv_id"
        app:layout_constraintTop_toBottomOf="@+id/tv_id" />

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="49dp"
        android:layout_height="48dp"
        android:layout_marginStart="16dp"
        android:layout_marginTop="12dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:src="@drawable/stu" />

    <TextView
        android:id="@+id/tv_tel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="140dp"
        android:text="TextView"
        app:layout_constraintBottom_toBottomOf="@+id/imageView"
        app:layout_constraintStart_toEndOf="@+id/imageView"
        app:layout_constraintTop_toTopOf="@+id/imageView" />


    <androidx.appcompat.widget.AppCompatImageButton
        android:id="@+id/btn_delete"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_marginStart="324dp"
        android:layout_marginTop="18dp"
        android:text="删除"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@android:drawable/ic_menu_close_clear_cancel" />

</androidx.constraintlayout.widget.ConstraintLayout>

  MainActivity

package com.suke.fragmentstudent;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;

import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        FragmentManager fm = getSupportFragmentManager();
        Fragment fragment = fm.findFragmentById(R.id.fragment_list);
        if (fragment == null) {
            fragment = new ListFragment();
            fm.beginTransaction()
                    .add(R.id.fragment_list, fragment)
                    .commit();
        }
    }
}

  ListFragment

package com.suke.fragmentstudent;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

public class ListFragment extends Fragment {
    private List<Student> list_stu = new ArrayList<>();
    private StudentAdapter adapter;
    private EditText editId;
    private EditText editName;
    private EditText editTel;
    private Button btnCommit;
    private ListView lvStu;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRetainInstance(true);
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_list, container, false);
        initView(view);
        initData();
        return view;
    }

    private void initData() {
        for (int i = 1; i < 6; i++) {
            list_stu.add(new Student("1920013522" + i, "书启秋枫" + i, "1531214566" + i));
        }
        adapter = new StudentAdapter();
        lvStu.setAdapter(adapter);

    }

    private void initView(View view) {
        editId = (EditText) view.findViewById(R.id.edit_id);
        editName = (EditText) view.findViewById(R.id.edit_name);
        editTel = (EditText) view.findViewById(R.id.edit_tel);
        btnCommit = (Button) view.findViewById(R.id.btn_commit);
        lvStu = (ListView) view.findViewById(R.id.lv_stu);

        btnCommit.setOnClickListener(v -> {
            String id = editId.getText().toString();
            String name = editName.getText().toString();
            String tel = editTel.getText().toString();
            editId.setText("");
            editName.setText("");
            editTel.setText("");
            list_stu.add(new Student(id, name, tel));
            adapter.notifyDataSetChanged();
        });

    }

    private class StudentAdapter extends BaseAdapter {
        private TextView tvId;
        private TextView tvName;
        private ImageView imageView;
        private TextView tvTel;
        private ImageButton btnDelete;
        
        @Override
        public int getCount() {
            return list_stu.size();
        }

        @Override
        public Object getItem(int position) {
            return list_stu.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_item_layout, parent, false);
            tvId = (TextView) convertView.findViewById(R.id.tv_id);
            tvName = (TextView) convertView.findViewById(R.id.tv_name);
            imageView = (ImageView) convertView.findViewById(R.id.imageView);
            tvTel = (TextView) convertView.findViewById(R.id.tv_tel);
            btnDelete = (ImageButton) convertView.findViewById(R.id.btn_delete);

            tvId.setText(list_stu.get(position).getSno());
            tvName.setText(list_stu.get(position).getSname());
            tvTel.setText(list_stu.get(position).getStele());

            tvTel.setOnClickListener(v -> {
                String tel = list_stu.get(position).getStele();
                Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + tel));
                startActivity(intent);
            });

            btnDelete.setOnClickListener(v -> {
                list_stu.remove(position);
                adapter.notifyDataSetChanged();
            });

            return convertView;
        }
    }
}

  Student

package com.suke.fragmentstudent;

public class Student {
    private String Sno;
    private String Sname;
    private String Stele;

    public Student(String sno, String sname, String stele) {
        Sno = sno;
        Sname = sname;
        Stele = stele;
    }

    public String getSno() {
        return Sno;
    }

    public void setSno(String sno) {
        Sno = sno;
    }

    public String getSname() {
        return Sname;
    }

    public void setSname(String sname) {
        Sname = sname;
    }

    public String getStele() {
        return Stele;
    }

    public void setStele(String stele) {
        Stele = stele;
    }
}

 四、运行结果

 

猜你喜欢

转载自blog.csdn.net/qq_45037155/article/details/124334013
今日推荐