2017-03-08 24 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 –

相關問題