gpt4 book ai didi

android - 如何在 android studio 中创建自定义数组适配器以禁用对 ListView 项的点击

转载 作者:行者123 更新时间:2023-12-04 13:33:28 24 4
gpt4 key购买 nike

当前的 Uni 学生,我正在尝试创建一个扩展 ArrayAdapter 类的自定义数组适配器类,以便我可以禁用对 ListView 中选定项目的单击。
我不确定如何实现这个新类
这就是我到目前为止所拥有的

package com.example.assignment1;

import android.content.Context;
import android.widget.ArrayAdapter;

import androidx.annotation.NonNull;

public class customAdapter extends ArrayAdapter {
public customAdapter(@NonNull Context context, int resource) {
super(context, resource);
}

@Override
public boolean areAllItemsEnabled() {
return false;
}

@Override
public boolean isEnabled(int position) {
// return super.isEnabled(position);
}
}
我也不确定如何编写 isEnabled 函数:
这就是我打算如何使用这个功能
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
poss = position + 1;
AlertDialog.Builder builder = new AlertDialog.Builder(viewFriends.this);
builder.setTitle("Notice");
builder.setMessage("Please select to to edit, delete a friend or cancel");

// add the buttons
builder.setPositiveButton("Edit", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {

//System.out.println(poss);
Intent intent = new Intent(getApplicationContext(), editOrDelete.class);
ArrayList<String> result1 = mydb.retrieveRow(poss);
name = result1.get(1);
age = result1.get(2);
gender = result1.get(3);
address = result1.get(4);
code = result1.get(0);
intent.putExtra("code", code);
intent.putExtra("name", name);
intent.putExtra("age", age);
intent.putExtra("gender", gender);
intent.putExtra("address", address);
startActivity(intent);
}
});
builder.setNeutralButton(" Delete", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {

System.out.println(poss);
mydb.updateDeleted(poss);
if(listView.getChildAt(position).isEnabled())
{
listView.getChildAt(position).setEnabled(false);
// function to disable clicks
}
}
});
builder.setNegativeButton("Cancel", null);
AlertDialog dialog = builder.create();
dialog.show();


}
});



}
public void displayFriendList() {
ArrayList<String> result = mydb.retrieveRows();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, result);
listView.setAdapter(adapter);
}
因此,当用户单击警报中的删除按钮时,我想将他们在 ListView 中单击的项目变灰(我设法实现了这一点),但我也希望它一旦无法被单击已被删除
以及如何实现这一目标的建议?

最佳答案

而不是使用常规的 ListView使用自定义:
1) 创建一个CustomListView类(class):

public class CustomListView extends ListView{

//add these three constructors
public CustomListView(Context context){
super(context);
}
public CustomListView(Context context , AttributeSet attrs){
super(context , attrs);
}
public CustomListView(Context context , AttributeSet attrs, int defStyleAttr){
super(context , attrs, defStyleAttr);
}

//handle the item click
@Override
public boolean performItemClick(View view , int position , long id){

if(!view.isEnabled()){
//don't handle the click
return false;
}else{
//handle the click
return super.performItemClick(view, position, id);
}

}

}
  • 添加 CustomListView您创建到您的 xml 布局而不是 ListView .
  • 代替:
    ListView listView = findViewById(.......);
    经过:
    CustomListView listView = findViewById(.......);

  • 2) 从您的 CustomAdapter 中删除这些方法类(class):
    @Override
    public boolean areAllItemsEnabled() {
    return false;
    }

    @Override
    public boolean isEnabled(int position) {
    // return super.isEnabled(position);
    }
    3) 像这样处理项目点击:
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, final View view, final int position, long id) {

    poss = position + 1;
    AlertDialog.Builder builder = new AlertDialog.Builder(viewFriends.this);
    builder.setTitle("Notice");
    builder.setMessage("Please select to to edit, delete a friend or cancel");

    // add the buttons
    builder.setPositiveButton("Edit", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {

    //.......keep whatever you have the same here

    }
    });

    builder.setNeutralButton(" Delete", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {

    //disable the view so that you won't receive clicks again
    view.setEnabled(false);

    }
    });

    builder.setNegativeButton("Cancel", null);
    AlertDialog dialog = builder.create();
    dialog.show();

    }
    });
    如果您使用上述实现,那么当您单击警报对话框中的删除按钮时,该项目将不会收到下一次单击事件。

    关于android - 如何在 android studio 中创建自定义数组适配器以禁用对 ListView 项的点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63633191/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com