当前位置: 首页 > 知识库问答 >
问题:

如何使用ImageView作为OnClick事件删除Listview项

易英奕
2023-03-14

好的,我有一个Listview适配器,其中包含一个ImageView、TextView和另一个ImageView。因此,当用户按下第二个ImageView时,我希望能够删除列表中的项目。当用户按下列表中的项目时,它将启动TextToSpeech,它将说出TextView中的内容。但如果用户想要删除条目,他/她将按下第二个ImageView,这是一个删除图标,此时该项目将从列表中删除。启动Imageview的单击侦听器不是问题,问题是我如何在listview适配器中获取相应项目的编号(int),以便我可以将其从数组中删除。这是列表中单个条目的xmllist_item.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginTop="3dp"
        android:layout_marginBottom="3dp">

        <ImageView
            android:id="@+id/item_icon_imageview"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="0.15"
            android:src="@drawable/ic_record_voice_24dp2"/>

        <TextView
            android:id="@+id/phrase_textview"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="0.80"
            android:textSize="20sp"
            android:layout_marginTop="5dp"
            android:text="My phone number is 305 666 8454"/>

        <ImageView
            android:layout_gravity="center"
            android:id="@+id/delte_item_imageview"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="0.10"
            android:src="@drawable/ic_delete_black_24dp"/>

    </LinearLayout>

</RelativeLayout>

用于扩展listview的片段

public class CustomFragment extends Fragment {
    private ArrayAdapter<String> adapter;
    private ListView listView;
    private FloatingActionButton addPhraseButton;
    private TextView phraseTitleTextView;
    private TextToSpeech textToSpeech;
    private ArrayList<String> phrases;
    private static final String PHRASE_LABEL = " Phrases";
    private static final String CATEGORY_KEY = "categories";
    private ImageView deleteItemImageView;

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

        final String categories;
        //if we selecte a category sent from home fragment else we got here through menu
        Bundle arguments = getArguments();
        if (arguments != null && arguments.containsKey(CATEGORY_KEY)) {
            categories = arguments.getString(CATEGORY_KEY).toLowerCase();
        }
        else {
            Resources res = view.getResources();
            categories = res.getStringArray(R.array.categories)[0].toLowerCase();
        }

        final Phrases allPhrases = Phrases.getPhrases();
        allPhrases.fetchAllPhrases(view.getContext());
        phrases = allPhrases.getAllPhrases().get(categories);

        phraseTitleTextView = view.findViewById(R.id.label_phrases_txtview);
        deleteItemImageView = view.findViewById(R.id.delte_item_imageview);

        phraseTitleTextView.setText(categories.substring(0,1).toUpperCase() +
                categories.substring(1)+ PHRASE_LABEL);
        addPhraseButton = view.findViewById(R.id.add_phrases_btn);
        // setting local for text to speech
        textToSpeech = new TextToSpeech(getActivity().getApplicationContext(), new TextToSpeech.OnInitListener() {
            @Override
            public void onInit(int status) {
                textToSpeech.setLanguage(Locale.US);
            }
        });

        //setting adapter and listview
        adapter = new ArrayAdapter<String>(getContext(), R.layout.entry_item, R.id.phrase_textview, phrases);
        listView = (ListView) view.findViewById(R.id.phrases_list);
        listView.setAdapter(adapter);
        listView.setItemsCanFocus(true);

        //activating text to speech when user selects item in listview
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> paren, View view, int position, long id) {
                String text = phrases.get(position);
                Toast.makeText(getContext(), text, Toast.LENGTH_LONG).show();
                textToSpeech.speak(text, TextToSpeech.QUEUE_FLUSH,null, null);
            }
        });

        deleteItemImageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

            }
        });

        //button to display alert dialog box to add new phrase
        addPhraseButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                addPhraseDialogBox();
            }
        });
        return view;
    }
}

共有1个答案

后星河
2023-03-14

您可以通过自定义适配器实现此目的。请检查以下内容:

public class CustomArrayAdapter extends ArrayAdapter<String> {

    LayoutInflater inflater;
    ArrayList<String> phrases;

    public CustomArrayAdapter(Context context, int textViewResourceId, ArrayList<String> items) {
        super(context, textViewResourceId, items);
        inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        phrases = items;
    }


    @Override
    public View getView(final int position, View convertView, final ViewGroup parent) {

        if (convertView == null) {
            convertView = inflater.inflate(R.layout.entry_item, parent, false);
        }

        ....

        ImageView deleteItemImageview = (ImageView) convertView.findViewById(R.id. delte_item_imageview);
        deleteItemImageview.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                phrases.remove(position);
                notifyDataSetChanged();
            }
        });

        return convertView;
    }
}
 类似资料:
  • 如何使用按钮onClick从ListView中删除所有内容?当我尝试“fullCourseList.clear();”时,我无法添加更多课程,只有再次访问页面后,页面才会刷新

  • 在React router中,我必须单击和onClick属性,如下所示 属性导航到关于路线 当我给超时内嵌函数调用点击,其导航到新页面,并在某个时候状态得到更新,导致显示以前的名称,直到状态更新为新名称。 是否有一种方法,只有在onClick函数中的代码执行之后,它才会导航到新路由。 您可以[在这里]获取整个代码(https://github.com/pushkalb123/basic-react

  • 问题内容: 我有两个 java类 和 两个 类的 两个布局 。每个 布局 中都有一个 按钮 。这两类都在扩展。现在在第一个布局中,我使用了 包含这样的 标签 我现在可以看到 两个按钮, 但是 第二个按钮 不起作用。 问题答案: 首先, 您必须声明并初始化 包含 视图,然后使用 view.findViewById() 方法进行贴花和初始化两个按钮,如下所示: 然后设置他们的 onClickListe

  • 问题内容: 我正在使用reactjs路由器中的Link组件,但无法使onClickevent运行。这是代码: 这是做这件事的方式还是另一种方式? 问题答案: 您以字符串形式传递,也意味着立即执行。 尝试

  • 我正在寻找一种将SQS作为事件源从lambda中删除的方法,我知道如何在控制台中执行,但有没有办法在Java中执行?

  • 问题内容: 尝试删除不为空的文件夹时,出现“访问被拒绝”错误。我尝试使用以下命令:。 删除/删除不为空的文件夹/目录的最有效方法是什么? 问题答案: 标准库参考:shutil.rmtree。 根据设计,在包含只读文件的文件夹树上失败。如果要删除该文件夹而不管它是否包含只读文件,请使用