检查列表视图适配器是否包含字符串

时间:2018-08-19 17:36:08

标签: android android-adapter

我想在添加新项之前检查适配器,如果有重复项,请忽略它。我尝试了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);


    }
});

5 个答案:

答案 0 :(得分:0)

您可以简单地检查列表中是否已经包含某个String和/或对象。

if(!list.contains(...) {
    list.add(..);
}

您可以检查此线程以获取更多信息: Check if a String is in an ArrayList of Strings

答案 1 :(得分:0)

如果顺序不重要,则可以使用HashSet而不是列表(一种SET类型),这些集合不允许重复的值,但也不保留插入顺序。

Java HashSet

示例用法:-

 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();
   }

  }
 }
});