android studio listview长按删除

Posted diamondDemand

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android studio listview长按删除相关的知识,希望对你有一定的参考价值。

activity_main.xml 的代码

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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="wrap_content"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView5"
        android:layout_width="45dp"
        android:layout_height="17dp"
        android:layout_marginLeft="4dp"
        android:layout_marginStart="4dp"
        android:layout_marginTop="16dp"
        android:text="班级:"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textView6"
        android:layout_width="47dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="4dp"
        android:layout_marginStart="4dp"
        android:layout_marginTop="29dp"
        android:text="学号:"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView5" />

    <EditText
        android:id="@+id/editText3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="12dp"
        android:layout_marginStart="12dp"
        android:ems="10"
        android:inputType="textPersonName"
        app:layout_constraintStart_toEndOf="@+id/textView5"
        tools:layout_editor_absoluteY="0dp" />

    <EditText
        android:id="@+id/editText4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="12dp"
        android:layout_marginStart="12dp"
        android:ems="10"
        android:inputType="textPersonName"
        app:layout_constraintStart_toEndOf="@+id/textView6"
        app:layout_constraintTop_toBottomOf="@+id/editText3" />

    <TextView
        android:id="@+id/textView7"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="4dp"
        android:layout_marginStart="4dp"
        android:layout_marginTop="28dp"
        android:text="姓名:"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView6" />

    <EditText
        android:id="@+id/editText5"
        android:layout_width="wrap_content"
        android:layout_height="45dp"
        android:layout_marginLeft="16dp"
        android:layout_marginStart="16dp"
        android:ems="10"
        android:inputType="textPersonName"
        app:layout_constraintStart_toEndOf="@+id/textView7"
        app:layout_constraintTop_toBottomOf="@+id/editText4" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="4dp"
        android:layout_marginStart="4dp"
        android:layout_marginTop="8dp"
        android:text="添加"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editText5" />

    <ListView
        android:id="@+id/android:list"
        android:layout_width="wrap_content"
        android:layout_height="313dp"
        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/button"
        app:layout_constraintVertical_bias="0.0" />
</android.support.constraint.ConstraintLayout>

item.xml 这是listview中的项

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/relativeLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/grade"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text= "班级"
            android:textSize="20sp"
            android:textColor="#0b0a0b"
            tools:layout_editor_absoluteX="46dp"
            android:paddingLeft="20dp"
            tools:layout_editor_absoluteY="0dp" />

        <TextView
            android:id="@+id/studentId"
            android:layout_width="wrap_content"
            android:layout_height="27dp"
            android:layout_weight="1"
            android:text="学号"
            android:textSize="20sp"
            android:textColor="#0b0a0b"
            tools:layout_editor_absoluteX="89dp"
            android:paddingLeft="20dp"
            tools:layout_editor_absoluteY="0dp" />

        <TextView
            android:id="@+id/name"
            android:layout_width="wrap_content"
            android:layout_height="27dp"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"

            android:layout_weight="1"
            android:text="姓名"
            android:textColor="#0b0a0b"
            android:paddingLeft="20dp"
            android:textSize="20sp" />
    </LinearLayout>

</android.support.constraint.ConstraintLayout>

strings.xml一些字符串资源,后来嫌麻烦,直接硬编码了

<resources>
    <string name="app_name">deletetry1</string>
    <string name="grade">计算机151</string>
    <string name="score">成绩</string>
    <string name="banji">班级</string>
    <string name="stid">学号</string>
    <string name="name1">王菲</string>
    <string name="name2">张宇</string>
    <string name="name3">张学友</string>
    <string name="name4">刘德华</string>
</resources>

information类,这个类用来管理学生信息

package com.example.cie.deletetry1;

public class Information {
    private String mGrade;
    private int mStudentId;
    private String mName;

    public Information(String grade, int studentId, String mName) {
        mGrade = grade;
        mStudentId = studentId;
        this.mName = mName;
    }

    public String getGrade() {
        return mGrade;
    }

    public void setGrade(String grade) {
        mGrade = grade;
    }

    public int getStudentId() {
        return mStudentId;
    }

    public void setStudentId(int studentId) {
        mStudentId = studentId;
    }

    public String getName() {
        return mName;
    }

    public void setName(String mName) {
        this.mName = mName;
    }
}

mainActivity.java

package com.example.cie.deletetry1;

import android.app.ListActivity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.*;
import android.widget.Button;
import android.widget.EditText;
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 MainActivity extends ListActivity {

    private Button mAddButton;
    private EditText grade, studentid, name;
    private Information[] mStudInfo = new Information[]{
            new Information("计算机151", 2014012543, "张宇"),
            new Information("计算机151", 2014012544, "刘德华"),
            new Information("计算机151", 2014012545, "张学友"),
    };
    private ListView listview;
    List<Map<String, Object>> mlistItems;
    Map<String, Object> mmap;
    //定义一个simpleAdapter,供列表项使用
    SimpleAdapter mSimpleAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listview = (ListView) findViewById(android.R.id.list);
        //为所有的listview的item注册contextMenu
        this.registerForContextMenu(listview);

        mlistItems = new ArrayList<Map<String, Object>>();
        for (int i = 0; i < mStudInfo.length; i++) {
            mmap = new HashMap<String, Object>();
            mmap.put("grade", mStudInfo[i].getGrade());
            mmap.put("studentId", mStudInfo[i].getStudentId());
            mmap.put("name", mStudInfo[i].getName());
            mlistItems.add(mmap);
        }
        mSimpleAdapter = new SimpleAdapter(this, mlistItems, R.layout.item, new String[]{"grade", "studentId", "name"}, new int[]{R.id.grade, R.id.studentId, R.id.name});
        listview.setAdapter(mSimpleAdapter);

        //添加对象
        mAddButton = (Button) findViewById(R.id.button);
        grade = (EditText) findViewById(R.id.editText3);
        studentid = (EditText) findViewById(R.id.editText4);
        name = (EditText) findViewById(R.id.editText5);
        mAddButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mmap = new HashMap<String, Object>();
                mmap.put("grade", grade.getText());
                mmap.put("studentId", studentid.getText());
                mmap.put("name", name.getText());
                mlistItems.add(mmap);
                mSimpleAdapter.notifyDataSetChanged();
            }
        });
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        menu.setHeaderTitle("选择操作");
        menu.add(0, 1, Menu.NONE, "删除");
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) item.getMenuInfo();
        switch (item.getItemId()) {
            case 1:
                //删除
                int pos = (int) listview.getAdapter().getItemId(menuInfo.position);
                if (mlistItems.remove(pos) != null) {
                    System.out.println("success");
                } else {
                    System.out.println("failed");
                }
                mSimpleAdapter.notifyDataSetChanged();
                Toast.makeText(getBaseContext(), "删除此项", Toast.LENGTH_SHORT).show();
                break;
            default:
                //标记
                return super.onContextItemSelected(item);
        }
        return true;
    }

}

效果图如上,这个例子使用

onCreateContextMenu为每个listview的项创建了一个菜单,然后使用
onContextItemSelected来响应当菜单被选中时的操作

以上是关于android studio listview长按删除的主要内容,如果未能解决你的问题,请参考以下文章

android - 长按从 ListView 中删除项目

转android: 长按删除listview的item

长按 ListView 项目的 Android onCreateContextMenu 致命异常

Android:如何在listView上的项目中结合滑动手势和长按

android的ListView中如何设置长按Item的时候该Item背景变色

android中的listview当长按事件触发后怎么接着触发点击事件。。。