2017-03-08 72 views
1

首先抱歉,如果标题不适合我的情况,首先我有一个列表视图在片段中有一个适配器类组件我的列表看起来像这样sample,那如果我点击菜单项,它会增加数量,每个点击那个小橙盒子显示,我的问题是,当我滚动这个列表,甚至改变活动,它不会保存点击,我喜欢这数量备份到0时,所有我需要我只是想挽救这个点击行动 这是我的适配器类如何保存点击列表项后的步骤

package abtech.waiteriano.com.waitrer.adapters; 

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
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.fragments.LVMenuFragment; 

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

public class CustomMenuLVAdapter extends BaseAdapter { 
    ArrayList<String> resultMenuItems; 
    LVItemHolder lvItemHolder; 
    Context context; 
    private static LayoutInflater inflater = null; 

    public CustomMenuLVAdapter(LVMenuFragment lvMenuFragment, ArrayList<String> listMenuArray) { 
     resultMenuItems = listMenuArray; 
     context = lvMenuFragment.getActivity(); 
     inflater = (LayoutInflater) context. 
       getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    @Override 
    public int getCount() { 
     return resultMenuItems.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return position; 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    public class LVItemHolder { 
     TextView listMenuTV, txtQTY; 
     RelativeLayout qtyView; 
     Button minusBtn; 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     final LVItemHolder lvItemHolder = new LVItemHolder(); 
     View rowView; 
     rowView = inflater.inflate(R.layout.menu_list_item, null); 
     lvItemHolder.listMenuTV = (TextView) rowView.findViewById(R.id.menulistTV2); 
     lvItemHolder.txtQTY = (TextView) rowView.findViewById(R.id.txtQTY); 
     lvItemHolder.minusBtn = (Button) rowView.findViewById(R.id.minusBtn); 
     lvItemHolder.listMenuTV.setText(resultMenuItems.get(position)); 
     lvItemHolder.txtQTY.setText("0"); 
     rowView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       int q = 0; 
       q = Integer.valueOf(lvItemHolder.txtQTY.getText().toString()); 
       q++; 
       lvItemHolder.txtQTY.setText("" + q); 
//    Toast.makeText(context, "You Clicked "+resultMenuItems.get(position), Toast.LENGTH_LONG).show(); 
      } 
     }); 
     lvItemHolder.minusBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       int q = 0; 
       q = Integer.valueOf(lvItemHolder.txtQTY.getText().toString()); 
       if (q > 0) 
        q--; 
       lvItemHolder.txtQTY.setText("" + q); 
      } 
     }); 
     return rowView; 
    } 
} 

这是我的活动

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.ListView; 

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.CustomMenuLVAdapter; 
import abtech.waiteriano.com.waitrer.connection_class.ConnectionClass; 

public class LVMenuFragment extends android.app.Fragment { 
    View rootView; 
    ListView menuListView; 
    public static ArrayList<String> listMenuArray = new ArrayList<String>(); 


    public LVMenuFragment() { 
     // 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_lvmenu, container, false); 
     menuListView=(ListView) rootView.findViewById(R.id.listView); 
     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(rs.getString("Name")); 

      } 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
     menuListView.setAdapter(new CustomMenuLVAdapter(this,listMenuArray)); 

     return rootView; 
    } 

} 

很抱歉,如果任何事情不清楚

在适配器
+0

您可以发布您的活动吗?我想你忘了customMenuLVAdapter.notifyDatasetChanged(); – msecilmis

+0

@msecilmis我发布了我的活动 –

回答

2

使用此

public class CustomMenuLVAdapter extends BaseAdapter { 
ArrayList<String> resultMenuItems; 
LVItemHolder lvItemHolder; 
Context context; 
private static LayoutInflater inflater = null; 

HashMap<Integer, Integer> map = new HashMap<>; 

public CustomMenuLVAdapter(LVMenuFragment lvMenuFragment, ArrayList<String> listMenuArray) { 
    resultMenuItems = listMenuArray; 
    context = lvMenuFragment.getActivity(); 
    inflater = (LayoutInflater) context. 
      getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 

@Override 
public int getCount() { 
    return resultMenuItems.size(); 
} 

@Override 
public Object getItem(int position) { 
    return position; 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

public class LVItemHolder { 
    TextView listMenuTV, txtQTY; 
    RelativeLayout qtyView; 
    Button minusBtn; 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    final LVItemHolder lvItemHolder = new LVItemHolder(); 
    View rowView; 
    rowView = inflater.inflate(R.layout.menu_list_item, null); 
    lvItemHolder.listMenuTV = (TextView) rowView.findViewById(R.id.menulistTV2); 
    lvItemHolder.txtQTY = (TextView) rowView.findViewById(R.id.txtQTY); 
    lvItemHolder.minusBtn = (Button) rowView.findViewById(R.id.minusBtn); 
    lvItemHolder.listMenuTV.setText(resultMenuItems.get(position)); 

    if(map.containsKey(position)){ 
      lvItemHolder.txtQTY.setText(""+map.get(position)); 
    }else{ 
     lvItemHolder.txtQTY.setText("0"); 
    } 

    rowView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      int q = 0; 
      q = Integer.valueOf(lvItemHolder.txtQTY.getText().toString()); 
      q++; 
      lvItemHolder.txtQTY.setText("" + q); 
      map.put(position,q) 
      //    Toast.makeText(context, "You Clicked "+resultMenuItems.get(position), Toast.LENGTH_LONG).show(); 
     } 
    }); 
    lvItemHolder.minusBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      int q = 0; 
      q = Integer.valueOf(lvItemHolder.txtQTY.getText().toString()); 
      if (q > 0) 
       q--; 
      lvItemHolder.txtQTY.setText("" + q); 
      map.put(position,q) 
     } 
    }); 
    return rowView; 
} 
+0

这里有什么问题HashMap map = new HashMap <> ;? –

+0

说Canot Infor参数 –

+0

把这个HashMap map = new HashMap (); –

0

有像下面作为一个例子funtion;

public void setNumber(int number) {this.number = number} 

然后当上一个项目的用户点击来增加它,你可以通过调用这个函数setNumber保存它。

resultMenuItems.get(position).setNumber(//you number inputed here//); 
//Then call notifydatasetChanged on your adapter// 

只要确保数字是通过ater中的getter函数获得的。

我希望这是有道理的

+0

好的,非常感谢,我会尝试这个 –

+0

对不起,你能解释更多如何使用这个功能? –

+0

hot把这个ma适配器类@ Janwilx72 –