删除列表视图中的重复行 Android
Remove duplicate rows in List View Android
我需要从 ListView 中删除重复的行 Android
下面是我的 Adapter 代码。
我有一个 HashMap,它由日期和 Bean 的 ArrayList 组成 Class 需要设置的数据如下图
屏幕 1:当我从 15 到 20 过滤数据时,我得到一个下面的列表,对于 15 到 19,对于 20 它从 15 复制的数据看起来很好
屏幕 2:但是当我滚动查看 20 的数据时,它重复了一个臭名昭著的问题,即隐蔽视图看到为日期 15 映射的数据
屏幕 3:此屏幕提供第 20 个日期的真实数据,只有 1 行。
下面是我的适配器代码。如果我需要更多支架或任何其他建议,请提出建议。
public class AdapterReport extends BaseAdapter
{
private ArrayList<LinearLayout> mLinearLayoutArry;
private Context con;
private ArrayList<String> keySet;
private HashMap<String, ArrayList<FFBDetailsBean>> hashMapBeanList;
public AdapterReport(Context con ,HashMap<String, ArrayList<FFBDetailsBean>> hashMapBeanList)
{
// TODO Auto-generated constructor stub
this.con = con;
this.hashMapBeanList = hashMapBeanList;
keySet = new ArrayList<String>();
Iterator it = hashMapBeanList.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pair = (Map.Entry)it.next();
System.out.println(pair.getKey() + " = " + pair.getValue());
keySet.add(""+pair.getKey());
}
Collections.sort(keySet);
}
@Override
public int getCount()
{
// TODO Auto-generated method stub
return hashMapBeanList.size();
}
@Override
public Object getItem(int arg0)
{
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0)
{
// TODO Auto-generated method stub
return 0;
}
public class ViewHolder
{
LinearLayout mLinearLayout ;
TextView mDateTxt;
Animation anim;
ViewHolder(Context context)
{
}
}
@Override
public View getView(int position, View convertView, ViewGroup arg2)
{
final ViewHolder holder;
ViewGroup vg = null;
LayoutInflater inflater = (LayoutInflater) con.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ArrayList<FFBDetailsBean> ffbBeanListArry = hashMapBeanList.get(keySet.get(position));
if (convertView == null)
{
convertView = inflater.inflate(R.layout.report_between_days_content_layout, vg);
holder = new ViewHolder(con);
holder.mDateTxt = (TextView)convertView.findViewById(R.id.componentDate);
holder.mLinearLayout = (LinearLayout)convertView.findViewById(R.id.contentListLinearLayout);
for (int i = 0; i < ffbBeanListArry.size(); i++) {
View view;
LayoutInflater inflater2 = (LayoutInflater)con.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater2.inflate(R.layout.report_between_days_content_inner_layout, null);
LinearLayout innerLayoutLinear = (LinearLayout)view.findViewById(R.id.innerLinearLayout);
TextView receiptDateValue = (TextView)view.findViewById(R.id.receiptNoValue);
receiptDateValue.setText(ffbBeanListArry.get(i).getmFFBReceiptNo());
TextView farmerCodeValue = (TextView)view.findViewById(R.id.farmerCodeValue);
farmerCodeValue.setText(ffbBeanListArry.get(i).getmFFBFarmerCode());
TextView quantityValue = (TextView)view.findViewById(R.id.quantityValue);
quantityValue.setText(ffbBeanListArry.get(i).getmFFBQuantity());
holder.mLinearLayout.addView(innerLayoutLinear);
}
convertView.setTag(holder);
}
else
{
holder = (ViewHolder) convertView.getTag();
}
holder.mDateTxt.setText(keySet.get(position));
return convertView;
}
Add listView.invalidateViews(); and listView.notifyDatasetChanged()
可能会对你有所帮助
按如下方式编辑了我的代码并且它起作用了:
行 holder.mLinearLayout.removeAllViews();
对我有用
@Override
public View getView(int position, View convertView, ViewGroup arg2)
{
final ViewHolder holder;
ViewGroup vg = null;
LayoutInflater inflater = (LayoutInflater) con.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ArrayList<FFBDetailsBean> ffbBeanListArry = hashMapBeanList.get(keySet.get(position));
if (convertView == null)
{
convertView = inflater.inflate(R.layout.report_between_days_content_layout, vg);
holder = new ViewHolder(con);
holder.mDateTxt = (TextView)convertView.findViewById(R.id.componentDate);
holder.mLinearLayout = (LinearLayout)convertView.findViewById(R.id.contentListLinearLayout);
convertView.setTag(holder);
}
else
{
holder = (ViewHolder) convertView.getTag();
}
holder.mDateTxt.setText(keySet.get(position));
holder.mLinearLayout.removeAllViews();
for (int i = 0; i < ffbBeanListArry.size(); i++) {
View view;
LayoutInflater inflater2 = (LayoutInflater)con.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater2.inflate(R.layout.report_between_days_content_inner_layout, null);
LinearLayout innerLayoutLinear = (LinearLayout)view.findViewById(R.id.innerLinearLayout);
TextView receiptDateValue = (TextView)view.findViewById(R.id.receiptNoValue);
receiptDateValue.setText(ffbBeanListArry.get(i).getmFFBReceiptNo());
TextView farmerCodeValue = (TextView)view.findViewById(R.id.farmerCodeValue);
farmerCodeValue.setText(ffbBeanListArry.get(i).getmFFBFarmerCode());
TextView quantityValue = (TextView)view.findViewById(R.id.quantityValue);
quantityValue.setText(ffbBeanListArry.get(i).getmFFBQuantity());
holder.mLinearLayout.addView(innerLayoutLinear);
}
return convertView;
}
我需要从 ListView 中删除重复的行 Android 下面是我的 Adapter 代码。 我有一个 HashMap,它由日期和 Bean 的 ArrayList 组成 Class 需要设置的数据如下图
屏幕 1:当我从 15 到 20 过滤数据时,我得到一个下面的列表,对于 15 到 19,对于 20 它从 15 复制的数据看起来很好
屏幕 2:但是当我滚动查看 20 的数据时,它重复了一个臭名昭著的问题,即隐蔽视图看到为日期 15 映射的数据
屏幕 3:此屏幕提供第 20 个日期的真实数据,只有 1 行。
下面是我的适配器代码。如果我需要更多支架或任何其他建议,请提出建议。
public class AdapterReport extends BaseAdapter
{
private ArrayList<LinearLayout> mLinearLayoutArry;
private Context con;
private ArrayList<String> keySet;
private HashMap<String, ArrayList<FFBDetailsBean>> hashMapBeanList;
public AdapterReport(Context con ,HashMap<String, ArrayList<FFBDetailsBean>> hashMapBeanList)
{
// TODO Auto-generated constructor stub
this.con = con;
this.hashMapBeanList = hashMapBeanList;
keySet = new ArrayList<String>();
Iterator it = hashMapBeanList.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pair = (Map.Entry)it.next();
System.out.println(pair.getKey() + " = " + pair.getValue());
keySet.add(""+pair.getKey());
}
Collections.sort(keySet);
}
@Override
public int getCount()
{
// TODO Auto-generated method stub
return hashMapBeanList.size();
}
@Override
public Object getItem(int arg0)
{
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0)
{
// TODO Auto-generated method stub
return 0;
}
public class ViewHolder
{
LinearLayout mLinearLayout ;
TextView mDateTxt;
Animation anim;
ViewHolder(Context context)
{
}
}
@Override
public View getView(int position, View convertView, ViewGroup arg2)
{
final ViewHolder holder;
ViewGroup vg = null;
LayoutInflater inflater = (LayoutInflater) con.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ArrayList<FFBDetailsBean> ffbBeanListArry = hashMapBeanList.get(keySet.get(position));
if (convertView == null)
{
convertView = inflater.inflate(R.layout.report_between_days_content_layout, vg);
holder = new ViewHolder(con);
holder.mDateTxt = (TextView)convertView.findViewById(R.id.componentDate);
holder.mLinearLayout = (LinearLayout)convertView.findViewById(R.id.contentListLinearLayout);
for (int i = 0; i < ffbBeanListArry.size(); i++) {
View view;
LayoutInflater inflater2 = (LayoutInflater)con.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater2.inflate(R.layout.report_between_days_content_inner_layout, null);
LinearLayout innerLayoutLinear = (LinearLayout)view.findViewById(R.id.innerLinearLayout);
TextView receiptDateValue = (TextView)view.findViewById(R.id.receiptNoValue);
receiptDateValue.setText(ffbBeanListArry.get(i).getmFFBReceiptNo());
TextView farmerCodeValue = (TextView)view.findViewById(R.id.farmerCodeValue);
farmerCodeValue.setText(ffbBeanListArry.get(i).getmFFBFarmerCode());
TextView quantityValue = (TextView)view.findViewById(R.id.quantityValue);
quantityValue.setText(ffbBeanListArry.get(i).getmFFBQuantity());
holder.mLinearLayout.addView(innerLayoutLinear);
}
convertView.setTag(holder);
}
else
{
holder = (ViewHolder) convertView.getTag();
}
holder.mDateTxt.setText(keySet.get(position));
return convertView;
}
Add listView.invalidateViews(); and listView.notifyDatasetChanged()
可能会对你有所帮助
按如下方式编辑了我的代码并且它起作用了:
行 holder.mLinearLayout.removeAllViews();
对我有用
@Override
public View getView(int position, View convertView, ViewGroup arg2)
{
final ViewHolder holder;
ViewGroup vg = null;
LayoutInflater inflater = (LayoutInflater) con.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ArrayList<FFBDetailsBean> ffbBeanListArry = hashMapBeanList.get(keySet.get(position));
if (convertView == null)
{
convertView = inflater.inflate(R.layout.report_between_days_content_layout, vg);
holder = new ViewHolder(con);
holder.mDateTxt = (TextView)convertView.findViewById(R.id.componentDate);
holder.mLinearLayout = (LinearLayout)convertView.findViewById(R.id.contentListLinearLayout);
convertView.setTag(holder);
}
else
{
holder = (ViewHolder) convertView.getTag();
}
holder.mDateTxt.setText(keySet.get(position));
holder.mLinearLayout.removeAllViews();
for (int i = 0; i < ffbBeanListArry.size(); i++) {
View view;
LayoutInflater inflater2 = (LayoutInflater)con.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater2.inflate(R.layout.report_between_days_content_inner_layout, null);
LinearLayout innerLayoutLinear = (LinearLayout)view.findViewById(R.id.innerLinearLayout);
TextView receiptDateValue = (TextView)view.findViewById(R.id.receiptNoValue);
receiptDateValue.setText(ffbBeanListArry.get(i).getmFFBReceiptNo());
TextView farmerCodeValue = (TextView)view.findViewById(R.id.farmerCodeValue);
farmerCodeValue.setText(ffbBeanListArry.get(i).getmFFBFarmerCode());
TextView quantityValue = (TextView)view.findViewById(R.id.quantityValue);
quantityValue.setText(ffbBeanListArry.get(i).getmFFBQuantity());
holder.mLinearLayout.addView(innerLayoutLinear);
}
return convertView;
}