【发布时间】:2014-08-14 12:26:41
【问题描述】:
每次我扫描 pctCode 时,我都会将项目添加到我的 ArrayList。不幸的是,当用户扫描两次时,我可以得到双份。
通过谷歌我发现:
解决方案A(添加之前,如果已经存在,请查看列表):
if (ListOrdres.contains(OrdreItem))
ListOrdres.add(OrdreItem);
方案B(使用HashSet):
ListOrdres.add(OrdreItem);
HashSet<Pers_Ordre> hs = new HashSet();
hs.addAll(ListOrdres);
ListOrdres.clear();
ListOrdres.addAll(hs);
解决方案 A 和 B 都不起作用,我仍然得到双份。
这是我的代码:
public class MainActivity extends Activity implements OnClickListener
{
...
ArrayList<Pers_Ordre> ListOrdres = new ArrayList<Pers_Ordre>();
....
@Override
public void onClick(View v)
{
switch(v.getId())
{
case R.id.btn_Scan:
{
IntentIntegrator scanIntegrator = new IntentIntegrator(this);
scanIntegrator.initiateScan();
........
public void onActivityResult ( int requestCode, int resultCode, Intent intent)
{
.......
//retrieve scan result
IntentResult scanningResult =
IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
if(scanningResult != null)
{
//we have a result
String scanContent = scanningResult.getContents();
if(scanContent != null)
{
Pers_Ordre OrdreItem = new Pers_Ordre();
String[] TempOrdre = scanContent.split("_");
OrdreItem.setLe_CodeClient(TempOrdre[0]);
OrdreItem.setLe_CodeDest(TempOrdre[1]);
OrdreItem.setLe_NoOrdre(TempOrdre[2]);
OrdreItem.setLe_Ordre_1(TempOrdre[3]);
OrdreItem.setLe_Ordre_2(TempOrdre[4]);
OrdreItem.setLe_Date(LedateFormat.format(Ledate));
OrdreItem.setLe_GPS(TempAddr);
ListOrdres.add(OrdreItem);
HashSet<Pers_Ordre> hs = new HashSet();
hs.addAll(ListOrdres);
ListOrdres.clear();
ListOrdres.addAll(hs);
m_adapter = new CustomListAdapter(this, ListOrdres);
m_adapter.notifyDataSetChanged();
lv_Ordre.setAdapter(m_adapter);
}
}
}
}
}
}
}
这是我的持久性命令代码:
public class Pers_Ordre {
private String Le_CodeClient;
private String Le_CodeDest;
private String Le_NoOrdre;
private String Le_Ordre_1;
private String Le_Ordre_2;
private String Le_Date;
private String Le_GPS;
public String getLe_Date() {
return Le_Date;
}
public void setLe_Date(String le_Date) {
Le_Date = le_Date;
}
public String getLe_GPS() {
return Le_GPS;
}
public void setLe_GPS(String le_GPS) {
Le_GPS = le_GPS;
}
public String getLe_CodeClient() {
return Le_CodeClient;
}
public void setLe_CodeClient(String le_CodeClient) {
Le_CodeClient = le_CodeClient;
}
public String getLe_CodeDest() {
return Le_CodeDest;
}
public void setLe_CodeDest(String le_CodeDest) {
Le_CodeDest = le_CodeDest;
}
public String getLe_NoOrdre() {
return Le_NoOrdre;
}
public void setLe_NoOrdre(String le_NoOrdre) {
Le_NoOrdre = le_NoOrdre;
}
public String getLe_Ordre_1() {
return Le_Ordre_1;
}
public void setLe_Ordre_1(String le_Ordre_1) {
Le_Ordre_1 = le_Ordre_1;
}
public String getLe_Ordre_2() {
return Le_Ordre_2;
}
public void setLe_Ordre_2(String le_Ordre_2) {
Le_Ordre_2 = le_Ordre_2;
}
【问题讨论】:
-
您在第一个
if语句中的条件是错误的。只有当它已经存在于数组中时它才会添加项目,这永远不会(如果没有在其他地方填充数组)。用 !. 否定条件