【Android】_自定義Adapter_學生註冊(無資料庫)
阿新 • • 發佈:2018-12-23
本文是完善前一篇學生註冊文章(https://blog.csdn.net/cungudafa/article/details/84780652)中:對`自定義ListView`增加`介面卡Adapter`實現對每個學生個體進行再編輯和刪除操作。 |
目錄
(一) 自定義Adapter帶圖片用法
Android的listView控制元件非常靈和,可以自定義每一個列表項,實際上每個列表項就是一個View,在Android定義了3個列表控制元件:ListView、ExpandableListView和spinner。
列表的顯示要三個元素:
View: 用來顯示資料的View
介面卡: 用來吧資料對映到View上的中介
資料:具體的要被對映的字串,圖片,或者基本元件。通過自定義Adapter實現列表中每個item的子控制元件的操作。
第一步自定義一個StuAdapter繼承BaseAdapter,而且為了增加內部控制元件的點選事件,實現一個點選監聽的介面。
自定義的StuAdapter.java:
注意:
View.OnClickListener
與自定義AdapterView.OnItemClickListener, StuAdapter.InnerItemOnClickListener
區別:
1、 View.OnClickListener是對頁面上的點選事件Btn_add事件進行操作:
stu_adapter.xml:
StuAdapeterActivity.java
2、 引入的自定義的StuAdapter.InnerItemOnClickListener()
是對下圖編輯按鈕和刪除按鈕進行操作
ListView引入的樣式.xml:
StuAdapeterActivity.java
(二) 學生管理系統Demo
效果實現圖:
(三)具體的編碼實現
a)自定義部分:(新建的java和xml樣式)
- 先貼出自定義的介面卡StuAdapter.java
package com.example.cungu.myapplication3;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
public class StuAdapter extends BaseAdapter implements View.OnClickListener {
private List stuDates;///Aadapter的資料來源,
private Context stuContext;//一個上下文
private InnerItemOnClickListener innerItemOnClickListener;//自定義的內部點選監聽介面
//構造方法
public StuAdapter(Context context,List list){
this.stuDates=list;
this.stuContext=context;
}
/**
* 獲得列表項item的個數
* @return
*/
@Override
public int getCount() {
return stuDates.size();
}
/**
* 根據列表中item的位置獲(i)獲得item的值
* @param i
* @return
*/
@Override
public Object getItem(int i) {
return stuDates.get(i);
}
/**
* 根據item的位置i獲得item的id
* @param i
* @return
*/
@Override
public long getItemId(int i) {
return i;
}
/**
*
* @param i
* @param view
* @param viewGroup
* @return
*/
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
//建立一個view物件(item),物件的樣式採用自定義的layout樣式
View stuView =View.inflate(stuContext,R.layout.myspinner_item,null);
///獲得item的每個子元素
//ImageView iv_userIcon=stuView.findViewById(R.id.userIcon);
TextView tv_name=stuView.findViewById(R.id.name);
TextView tv_major=stuView.findViewById(R.id.major);
ImageView iv_edit=stuView.findViewById(R.id.edit);
ImageView iv_delete=stuView.findViewById(R.id.delete);
//將資料來源的一項資料和item的子元素繫結
// iv_userIcon.setImageResource(R.drawable.qianxi1);
StuInfo student= (StuInfo) stuDates.get(i);
tv_name.setText(student.getName());
tv_major.setText(student.getMajor());
iv_edit.setImageResource(R.drawable.edit);
iv_delete.setImageResource(R.drawable.delete);
//給iv_edit增加一個監聽
iv_delete.setOnClickListener(this);
iv_edit.setOnClickListener(this);
//給刪除和編輯的imageView設定一個標誌,用item的位置i來定位,類似一個id
iv_delete.setTag(i);
iv_edit.setTag(i);
return stuView;
}
///建立一個內部控制元件的監聽介面
interface InnerItemOnClickListener{
abstract void itemClick(View view);
}
///adapter的內部控制元件的監聽事件設定
public void setOnInnerItemOnClickListener(InnerItemOnClickListener listener){
//實現此介面的類的物件傳入
this.innerItemOnClickListener=listener;
}
//OnClick()方法,在此方法裡面會呼叫子類重寫的itemClick()方法,
// 而方法裡的引數view指的就是點選的view。
// 所以我們只要在重寫的itemClick()方法裡實現點選後的邏輯即可
@Override
public void onClick(View view) {
innerItemOnClickListener.itemClick(view);
}
}
- 自定義學生類StuInfo.java
package com.example.cungu.myapplication3;
import java.io.Serializable;
public class StuInfo implements Serializable {
private String name;
private String major;
public StuInfo(String n, String m)
{
name=n;
major=m;
}
public String getMajor() {
return major;
}
public String getName() {
return name;
}
public void setMajor(String major) {
this.major = major;
}
public void setName(String name) {
this.name = name;
}
}
- 自定義的學生ListView的樣式myspinner_item.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="易烊千璽"
android:textSize="24sp"
android:textColor="#404040"/>
<TextView
android:id="@+id/major"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/name"
android:layout_marginLeft="20dp"
android:text="物聯網工程"
android:textColor="#003472"
android:textSize="15sp" />
<ImageView
android:id="@+id/edit"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@drawable/edit"
android:layout_toLeftOf="@+id/delete"
android:layout_marginRight="5dp"
/>
<ImageView
android:id="@+id/delete"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentRight="true"
android:src="@drawable/delete"
/>
</RelativeLayout>
b)介面設計:(新建的activity介面)
- 學生新增介面activity_stu_adapter.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:background="#f2a98175">
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="學生列表"
android:textSize="30sp"
android:textColor="#ffffff"
android:layout_marginTop="10dp"
android:layout_marginLeft="20dp"/>
<ListView
android:id="@+id/studentslist"
android:layout_width="match_parent"
android:layout_height="400dp"
android:layout_below="@id/text"
android:layout_marginTop="5dp"
>
</ListView>
<Button
android:id="@+id/btn_add"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/studentslist"
style="?android:attr/borderlessButtonStyle"
android:text="新增"
android:textSize="20dp"
android:textColor="#ffffff"
android:background="@drawable/shape_button_main"/>
</RelativeLayout>
- StuAdapeterActivity.java
package com.example.cungu.myapplication3;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class StuAdapeterActivity extends AppCompatActivity implements View.OnClickListener,AdapterView.OnItemClickListener,
StuAdapter.InnerItemOnClickListener {
private ListView studentList;
private StuAdapter stuAdapater;
private List<StuInfo> students;
private Button Btn_add;
String name,major;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_stu_adapeter);
studentList=(ListView) findViewById(R.id.studentslist);
Btn_add=(Button)findViewById(R.id.btn_add);
Btn_add.setOnClickListener(this);
/*
構造一組學生的集合
*/
students=new ArrayList<>();
/* StuInfo s1=new StuInfo("易烊千璽","電子工程");
StuInfo s2=new StuInfo("王源","物聯網工程");
StuInfo s3=new StuInfo("王俊凱","電腦科學");
students.add(s1);
students.add(s2);
students.add(s3);
*/
//獲取傳值
Bundle bundle = getIntent().getExtras();
ArrayList<StuInfo> students4=(ArrayList<StuInfo>) bundle.get("students");
for(StuInfo s:students4){
name=s.getName();
major=s.getMajor();
StuInfo s4=new StuInfo(name,major);
students.add(s4);
}
stuAdapater=new StuAdapter(this,students);
///為配置器設定一個自定義的item內部控制元件的點選監聽
stuAdapater.setOnInnerItemOnClickListener(this);
///listview設定介面卡
studentList.setAdapter(stuAdapater);
///LISTVIEW設定選項監聽
studentList.setOnItemClickListener(this);
}
///列表的每個item的點選事件
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
ListView list = (ListView) adapterView;
StuInfo s= (StuInfo) list.getItemAtPosition(i);
Toast.makeText(this, s.getName(),Toast.LENGTH_SHORT).show();
}
///內部控制元件的點選事件方法
@Override
public void itemClick(View view) {
int position= (int) view.getTag();
switch (view.getId()) {
case R.id.edit:
Intent intent=new Intent();
Toast.makeText(this, "編輯" + name, Toast.LENGTH_SHORT).show();
intent.putExtra("name", name);
students.remove(position);
stuAdapater.notifyDataSetChanged();//介面卡更新資料
setResult(0, intent);
finish();
intent.setClass(this,StuListOperationActivity.class);//新增學生
startActivity(intent);
break;
case R.id.delete:
students.remove(position);//刪除集合
stuAdapater.notifyDataSetChanged();//介面卡更新資料
Toast.makeText(this, "刪除" + position, Toast.LENGTH_SHORT).show();
break;
}
}
//新增學生btn_add按鈕
@Override
public void onClick(View v) {
Intent intent=new Intent();
switch (v.getId()) {
case R.id.btn_add:
intent.setClass(this, StuListOperationActivity.class);//計算器線性1
startActivity(intent);
break;
}
}
}
- 學生列表介面activity_stu_list_operation.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#f2a98175"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="學生新增"
android:textSize="25dp"
android:textColor="#ffffff"/>
<AutoCompleteTextView
android:id="@+id/name"
android:layout_width="240dp"
android:layout_height="42dp"
android:layout_marginTop="20dp"
android:background="@drawable/shape_edit"
android:hint="name" <