java - 如何在 ListView 中为项目设置 OnClick 但不转到另一个 Activity

标签 java android

首先,如果这个问题标题不适合我的案例,我很抱歉,但我会解释我的案例,首先我创建了一个 fragment ,并在这个 fragment 中创建了一个 ListView ,并创建了另一个具有 View 的 xml 文件列表中的每个项目,为这个 item.xml 的 setter 和 getter 创建了一个 java 类,还创建了一个适配器类,它具有这样的 View View在这个 View 中有一个橙色的小相对布局,它有数量,在这个橙色小框的右边我有一个按钮,这个按钮的功能应该减少列表中项目的数量。所以如果我点击在 ListView 中的项目上,它会增加这个小盒子里的数量,例如,如果我点击菠萝项目,它会增加我点击的项目数量,替换 0 将是 1 和 id 我在同一时间点击了另一次它将用 2 代替 1 代替项目,依此类推,对于灰色小按钮,它会减少橙色小框中的数量 这是 ListView Fragment.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="abtech.waiteriano.com.waitrer.fragments.MenuLVFragment">

    <ListView
        android:id="@+id/menuLV"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</FrameLayout>

这是 Fragment.Java

package abtech.waiteriano.com.waitrer.fragments;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import abtech.waiteriano.com.waitrer.MenuActivity;
import abtech.waiteriano.com.waitrer.R;
import abtech.waiteriano.com.waitrer.adapters.CustomMenuListViewAdapter;
import abtech.waiteriano.com.waitrer.connection_class.ConnectionClass;
import abtech.waiteriano.com.waitrer.getters_and_setters.MenuListItem;

public class MenuLVFragment extends android.app.Fragment {

    View rootView;
    ListView menuListView;
    TextView TxtQty;
    Button minusBtn;
    static ArrayList<MenuListItem> listMenuArray = new ArrayList<MenuListItem>();
    CustomMenuListViewAdapter customMenuListViewAdapter;

    public MenuLVFragment() {
        // Required empty public constructor
    }


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

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        rootView = inflater.inflate(R.layout.fragment_menu_lv, container, false);
        menuListView = (ListView) rootView.findViewById(R.id.menuLV);
        customMenuListViewAdapter = new CustomMenuListViewAdapter(getActivity(), R.layout.menu_row_list, listMenuArray);
        menuListView.setAdapter(customMenuListViewAdapter);
        listMenuArray.clear();
        String menuListSTR = "";
        if (MenuActivity.Prst_ID.trim() == "-1")
            menuListSTR = "Select ID,Code,Name,Name2 From Presets Where Active = 1 And Rest_ID_Active = 1 AND OutLet_ID_Active = 1 ORDER BY Code";
        else
            menuListSTR = "select dbo.MenuItems.Item_ID, dbo.Items.Code, dbo.Items.Name, dbo.Items.Name2, dbo.Items.PrintOnChick, dbo.Items.Taxable, dbo.Items.NoServiceCharge, dbo.Items.PrintOnReport,Case { fn IFNULL ((SELECT Price_Value FROM dbo.ItemsPrices WHERE (PriceLVL_ID = 1) AND (Item_ID = dbo.Items.ID)), 0) } when 0 then dbo.Items.StaticPrice Else { fn IFNULL ((SELECT Price_Value FROM dbo.ItemsPrices WHERE (PriceLVL_ID = 1) AND (Item_ID = dbo.Items.ID)), dbo.Items.StaticPrice) } END AS Price From dbo.MenuItems LEFT OUTER JOIN dbo.Items ON dbo.MenuItems.Item_ID = dbo.Items.ID Where  (dbo.MenuItems.Preset_ID = " + MenuActivity.Prst_ID + ") AND (dbo.MenuItems.Rest_ID_Active = " + ConnectionClass.Rest_ID + ") AND (dbo.MenuItems.OutLet_ID_Active = " + ConnectionClass.OutletID + ") AND (dbo.Items.Active = 1) ORDER BY dbo.MenuItems.SortNumber";

        ResultSet rs = ConnectionClass.Ret_RS(menuListSTR);
        try {
            while (rs.next()) {
                listMenuArray.add(new MenuListItem(rs.getString("Name")));

            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        menuListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(getActivity(),"You Clicked Here",Toast.LENGTH_SHORT).show();
            }
        });
        return rootView;


    }
}

这是item.xml

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

    <RelativeLayout
        android:background="#bebdbd"
        android:layout_height="80dp"
        android:id="@+id/menuRL"
        android:layout_width="fill_parent">


        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:srcCompat="@drawable/questionsign"
            android:layout_marginStart="20dp"
            android:id="@+id/itemImage"
            android:layout_centerVertical="true"
            android:layout_alignParentStart="true" />

        <RelativeLayout
            android:layout_width="35dp"
            android:layout_height="35dp"
            android:layout_marginEnd="37dp"
            android:id="@+id/qtyID"
            android:background="#f9762f"
            android:layout_centerVertical="true"
            android:layout_alignParentEnd="true">

            <TextView
                android:text="0"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/txtQTY"
                android:layout_centerVertical="true"
                android:layout_centerHorizontal="true" />
        </RelativeLayout>

        <TextView
            android:text="TextView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="15dp"
            android:textStyle="bold"
            android:id="@+id/menulistTV2"
            android:layout_alignTop="@+id/itemImage"
            android:layout_toEndOf="@+id/itemImage" />

        <Button
            android:text="-"
            android:textSize="15dp"
            android:layout_width="35dp"
            android:layout_height="35dp"
            android:id="@+id/minusBtn"
            android:layout_alignTop="@+id/menulistTV2"
            android:layout_alignParentEnd="true" />

    </RelativeLayout>

</LinearLayout>

这是 getter 和 setter 类 包 abtech.waiteriano.com.waitrer.getters_and_setters;

import android.graphics.Bitmap;

/**
 * Created by dell on 3/1/2017.
 */

public class MenuListItem {
    Bitmap image;
    String menuItemName;
    String minusButton;
    String plusButton;
    String qtyView;

    public MenuListItem(String menuItemName) {
        super();
        this.image = image;
        this.menuItemName = menuItemName;
        this.minusButton = minusButton;
        this.plusButton = plusButton;
        this.qtyView = qtyView;
    }

    public Bitmap getImage() {
        return image;
    }

    public void setImage(Bitmap image) {
        this.image = image;
    }

    public String getMenuItemName() {
        return menuItemName;
    }

    public void setMenuItemName(String menuItemName) {
        this.menuItemName = menuItemName;
    }
    public String getMinusButton() {
        return minusButton;
    }

    public void setMinusButton(String minusButton) {
        this.minusButton = minusButton;
    }
    public String getPlusButton() {
        return plusButton;
    }

    public void setPlusButton(String plusButton) {
        this.plusButton = plusButton;
    }
    public String getQtyView() {
        return qtyView;
    }

    public void setQtyView(String qtyView) {
        this.qtyView = qtyView;
    }
}

这是我的适配器类

package abtech.waiteriano.com.waitrer.adapters;

import android.app.Activity;
import android.content.Context;
import android.support.annotation.NonNull;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.TextView;

import java.util.ArrayList;

import abtech.waiteriano.com.waitrer.R;
import abtech.waiteriano.com.waitrer.getters_and_setters.MenuListItem;

/**
 * Created by dell on 3/1/2017.
 */

public class CustomMenuListViewAdapter extends ArrayAdapter<MenuListItem> {
    Context context;
    int layoutResourceId;
    ArrayList<MenuListItem> dataListMenu = new ArrayList<MenuListItem>();

    public CustomMenuListViewAdapter(Context context, int layoutResourceId, ArrayList<MenuListItem>dataListMenu) {
        super(context,layoutResourceId,dataListMenu);
        this.layoutResourceId = layoutResourceId;
        this.context = context;
        this.dataListMenu = dataListMenu;


    }

    @NonNull
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View listMenuRow = convertView;
        RecordListMenuHolder recordListMenuHolder = null;

        if(listMenuRow == null){
            LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            listMenuRow = inflater.inflate(layoutResourceId, parent, false);

            recordListMenuHolder = new RecordListMenuHolder();
//            recordListMenuHolder.menuItemImage = (String) listMenuRow.findViewById(R.id.itemImage);
            recordListMenuHolder.listMenuTV = (TextView) listMenuRow.findViewById(R.id.menulistTV2);
            recordListMenuHolder.qtyView = (RelativeLayout) listMenuRow.findViewById(R.id.qtyID);
            recordListMenuHolder.minusBtn = (Button) listMenuRow.findViewById(R.id.minusBtn);
            listMenuRow.setTag(recordListMenuHolder);
        }else{
            recordListMenuHolder = (RecordListMenuHolder)listMenuRow.getTag();
        }

        MenuListItem menuListItem = dataListMenu.get(position);
        recordListMenuHolder.listMenuTV.setText(menuListItem.getMenuItemName());

        return listMenuRow;
    }

    static class RecordListMenuHolder {
//        Image menuItemImage;
        TextView listMenuTV;
        RelativeLayout qtyView;
        Button minusBtn;
        Button plusBtn;
    }
}

抱歉,如果我的解释不明白,如果有任何代码查询,请发表评论

Error with setText

最佳答案

public class CustomMenuListViewAdapter extends ArrayAdapter<MenuListItem> {
    Context context;
    int layoutResourceId;
    ArrayList<MenuListItem> dataListMenu = new ArrayList<MenuListItem>();
        RecordListMenuHolder recordListMenuHolder;
int qty = 0;

    public CustomMenuListViewAdapter(Context context, int layoutResourceId, ArrayList<MenuListItem>dataListMenu) {
        super(context,layoutResourceId,dataListMenu);
        this.layoutResourceId = layoutResourceId;
        this.context = context;
        this.dataListMenu = dataListMenu;


    }

    @NonNull
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View listMenuRow = convertView;

        if(listMenuRow == null){
            LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            listMenuRow = inflater.inflate(layoutResourceId, parent, false);

            recordListMenuHolder = new RecordListMenuHolder();
//            recordListMenuHolder.menuItemImage = (String) listMenuRow.findViewById(R.id.itemImage);
            recordListMenuHolder.listMenuTV = (TextView) listMenuRow.findViewById(R.id.menulistTV2);
            recordListMenuHolder.qtyView = (RelativeLayout) listMenuRow.findViewById(R.id.qtyID);
            recordListMenuHolder.minusBtn = (Button) listMenuRow.findViewById(R.id.minusBtn);
            listMenuRow.setTag(recordListMenuHolder);
        }else{
            recordListMenuHolder = (RecordListMenuHolder)listMenuRow.getTag();
        }

        MenuListItem menuListItem = dataListMenu.get(position);
        recordListMenuHolder.listMenuTV.setText(menuListItem.getMenuItemName());
listMenuRow.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
qty++;

recordListMenuHolder.qtyView.setText(""+qty);
            }
        });

        return listMenuRow;
    }

    static class RecordListMenuHolder {
//        Image menuItemImage;
        TextView listMenuTV;
        RelativeLayout qtyView;
        Button minusBtn;
        Button plusBtn;
    }
}

关于java - 如何在 ListView 中为项目设置 OnClick 但不转到另一个 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42629387/

相关文章:

java - 使用媒体播放器播放音频文件时出现问题

java - 方法重载还是重写?

java - MOXy 集/ map 映射

java - CXF:解码错误:意外元素,{} 是什么意思?

android - 如何在 Android 的标题栏中隐藏应用程序名称?

Android Studio 错误 :Error converting bytecode to dex: Cause: java. lang.RuntimeException: 异常解析类

android - Android 上的 MIFARE Ultralight 仿真

java - 在 Java 构造函数中设置数据时出现 NullPointerException

android - 如何发布android Apk到Jfrog artifactory

android - 完成 Kotlin 中的异步调用列表