我想在添加新项之前检查适配器,如果有重复项,请忽略它。我尝试了this method,但对我不起作用。
btnadd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
switch (radioGroup.getCheckedRadioButtonId()){
case R.id.Tshirt:
radio="Tshirt";
break;
case R.id.Shoes:
radio="Shoes";
break;
default:
radio="Pants";
break;
}
if (!txtname.getText().toString().isEmpty() && !txtdes.getText().toString().isEmpty() )
list.add(new products(txtname.getText().toString(), radio, txtdes.getText().toString(), R.drawable.shop));
myadapter adapter = new myadapter(MainActivity.this, list);
lstCountries.setAdapter(adapter);
}
});
答案 0 :(得分:0)
您可以简单地检查列表中是否已经包含某个String和/或对象。
if(!list.contains(...) {
list.add(..);
}
您可以检查此线程以获取更多信息: Check if a String is in an ArrayList of Strings
答案 1 :(得分:0)
如果顺序不重要,则可以使用HashSet而不是列表(一种SET类型),这些集合不允许重复的值,但也不保留插入顺序。
示例用法:-
HashSet<String> set=new HashSet<String>();
set.add("Ravi");
set.add("Vijay");
set.add("Ravi");
set.add("Ajay");
//Traversing elements
Iterator<String> itr=set.iterator();
while(itr.hasNext()){
System.out.println(itr.next());
}
答案 2 :(得分:0)
这是我的代码:
Mainactivity.java
package com.example.esi.shopapp;
import android.content.DialogInterface;
import android.support.annotation.Nullable;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.RadioGroup;
import java.security.PublicKey;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private ListView lstCountries;
public Button btnadd;
private EditText txtname;
private EditText txtdes;
private RadioGroup radioGroup;
String radio = "";
private List<products> list = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lstCountries = (ListView) findViewById(R.id.lists);
btnadd = findViewById(R.id.button);
txtname =findViewById(R.id.txt_name);
txtdes =findViewById(R.id.txt_desc);
radioGroup = findViewById(R.id.categorize);
btnadd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
switch (radioGroup.getCheckedRadioButtonId()){
case R.id.Tshirt:
radio="Tshirt";
break;
case R.id.Shoes:
radio="Shoes";
break;
default:
radio="Pants";
break;
}
if (!txtname.getText().toString().isEmpty() && !txtdes.getText().toString().isEmpty() )
if (!list.contains(txtname.getText().toString()))
list.add(new products(txtname.getText().toString(), radio, txtdes.getText().toString(), R.drawable.shop));
myadapter adapter = new myadapter(MainActivity.this, list);
lstCountries.setAdapter(adapter);
}
});
}
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id){
case R.id.clear_form:
txtname.setText("");
txtdes.setText("");
break;
case R.id.clear_list:
lstCountries.setAdapter(null);
break;
case R.id.setting:
break;
case R.id.exit:
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setMessage("Are you sure to exit?");
builder.setCancelable(false);
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
MainActivity.this.finish();
}
});
builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
break;
}
return super.onOptionsItemSelected(item);
}
}
myadapter.java
package com.example.esi.shopapp;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
public class myadapter extends BaseAdapter {
private Context context;
private List<products> list;
public myadapter(Context context, List<products> list) {
this.context = context;
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup root) {
if(convertView == null){
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.list_item_layout, root, false);
}
TextView txtCountryName = convertView.findViewById(R.id.txt_product_name);
TextView txtCountryContinent = convertView.findViewById(R.id.txt_product_desc);
TextView txtype = convertView.findViewById(R.id.txt_product_type);
ImageView imgCountryFlag = convertView.findViewById(R.id.img_country_flag);
txtCountryName.setText(list.get(position).getName());
txtCountryContinent.setText(list.get(position).getDescribe());
txtype.setText(list.get(position).getType());
imgCountryFlag.setImageResource(list.get(position).getFlag());
return convertView;
}
}
products.java
package com.example.esi.shopapp;
public class products {
private String name;
private String describe;
private String type;
private int flag;
public products(String name, String describe, String type, int flag) {
this.name = name;
this.describe = describe;
this.type = type;
this.flag = flag;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescribe() {
return describe;
}
public void setDescribe(String describe) {
this.describe = describe;
}
public int getFlag() {
return flag;
}
public void setFlag(int flag) {
this.flag = flag;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
答案 3 :(得分:0)
从您的代码中,我想您不想添加2个具有相同名称的产品。所以这是我为您提供的解决方案。
products.java
public class products {
private String name;
private String describe;
private String type;
private int flag;
public products(String name, String describe, String type, int flag) {
this.name = name;
this.describe = describe;
this.type = type;
this.flag = flag;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescribe() {
return describe;
}
public void setDescribe(String describe) {
this.describe = describe;
}
public int getFlag() {
return flag;
}
public void setFlag(int flag) {
this.flag = flag;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
// Add this method
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
products products = (products) o;
return name.equals(products.name);
}
}
MainActivity.java
btnadd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
switch (radioGroup.getCheckedRadioButtonId()){
case R.id.Tshirt:
radio="Tshirt";
break;
case R.id.Shoes:
radio="Shoes";
break;
default:
radio="Pants";
break;
}
// Modify this block code
if (!txtname.getText().toString().isEmpty() && !txtdes.getText().toString().isEmpty() ) {
products newProducts = new products(txtname.getText().toString(), radio, txtdes.getText().toString(), R.drawable.shop);
if (!list.contains(newProducts)) {
list.add(newProducts);
}
}
myadapter adapter = new myadapter(MainActivity.this, list);
lstCountries.setAdapter(adapter);
}
});
我的建议:因为您要对真实世界中的产品进行建模。最好将您的班级命名为Product
,而不是products
。
答案 4 :(得分:0)
您的逻辑是错误的。您将在每次单击项目时创建适配器的新实例。您应该移动
myadapter adapter = new myadapter(MainActivity.this, list);
lstCountries.setAdapter(adapter);
转到onCreate
方法。将adapter
设为全局变量,然后
将您当前的代码更改为此。
btnadd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
switch (radioGroup.getCheckedRadioButtonId()) {
case R.id.Tshirt:
radio = "Tshirt";
break;
case R.id.Shoes:
radio = "Shoes";
break;
default:
radio = "Pants";
break;
}
if (!txtname.getText().toString().isEmpty() && !txtdes.getText().toString().isEmpty()) {
products product = new products(txtname.getText().toString(), radio, txtdes.getText().toString(), R.drawable.shop)
if (!list.contains(product)) {
list.add(product);
adapter.notifyDataSetChanged();
}
}
}
});