首先,如果这个问题标题不适合我的案例,我很抱歉,但我会解释我的案例,首先我创建了一个 fragment ,并在这个 fragment 中创建了一个 ListView ,并创建了另一个具有 View 的 xml 文件列表中的每个项目,为这个 item.xml 的 setter 和 getter 创建了一个 java 类,还创建了一个适配器类,它具有这样的 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;
}
}
抱歉,如果我的解释不明白,如果有任何代码查询,请发表评论
最佳答案
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/