繁体   English   中英

从ArrayAdapter中删除项目

[英]Remove item from ArrayAdapter

我正在尝试实现删除项(因为它说明了当用户在每个项目中按textView时,将Android中的listView从0更新为1。例如:
有3个项目

  • 苹果0
  • Orrange 0
  • 葡萄0

在每个项目中都有一个textView作为按钮。 当用户按下Apple的textView时,我的应用程序会将“ apple”项更新为1,并将其从listView中删除,而在listview中,“ apple”将消失。 这是我的清单代码

public class ListPelangganUnsyncFragment extends ListFragment
{
    AdapterListPelanggan pelangganAdp;
    ArrayList<Pelanggan> pelanggan = null;
    FloatingActionButton fab;
    Button sync;
    int list = 0;
    int newList = 0;
    ListView listView;


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, final Bundle savedInstanceState)
    {
        final View rootView = inflater.inflate(R.layout.list_pelanggan, container, false);
        super.onCreate(savedInstanceState);

        listView = (ListView) rootView.findViewById(android.R.id.list);
//        Buat kalo udah ada login
//        SharedPreferences setting

        pelanggan = new ArrayList<Pelanggan>();

//        Buat ngambil data dari DB lokal
        final DBPelanggan dbpel = new DBPelanggan(getActivity()); // get context dri activity, return null klo fragment ini ga attach
        try
        {
            dbpel.open();
            pelanggan = dbpel.getDataPelanggan();
            dbpel.close();
            list = pelanggan.size();
            Log.d("List", list+"");
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }

        sync = (Button) rootView.findViewById(R.id.sinkron);
        Button add = (Button) rootView.findViewById(R.id.addPelanggan);
        add.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                Intent intent = new Intent(rootView.getContext(), FormPelangganActivity.class);
                intent.putExtra("fungsi", 0);
                startActivity(intent);
                getActivity().finish();
            }
        });

        sync.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                try
                {
                    dbpel.open();
                    dbpel.updateStat(pelanggan);
                    pelanggan = dbpel.getDataPelanggan();
                    dbpel.close();
                    if(pelanggan != null)
                    {
                        pelangganAdp = new AdapterListPelanggan(getActivity(), R.layout.isi_list_pelanggan, pelanggan);
                        listView.setAdapter(pelangganAdp);
                    }
                    ((MainActivity)getActivity()).selectFragment(0);

                }
                catch (SQLException e)
                {
                    e.printStackTrace();
                }
            }
        });




        //Adapter

        listView.setClickable(true);
        if(pelanggan != null)
        {
            pelangganAdp = new AdapterListPelanggan(getActivity(), R.layout.isi_list_pelanggan, pelanggan);
            listView.setAdapter(pelangganAdp);

            newList = listView.getCount();
            Log.d("List", newList + "");
        }

        return rootView;
    }

这是我的适配器:

public class AdapterListPelanggan extends ArrayAdapter<Pelanggan>
{
    private Context context;
    private int resource;
    private ArrayList<Pelanggan> arPelanggan;
    Holder h = null;
    DBPelanggan db;
    private boolean status;

    // Holder = Object
    static class Holder
    {
        TextView tv_KTP, tv_Nama;
        ImageView syncButton;
    }

    public AdapterListPelanggan(Context context, int resource, ArrayList<Pelanggan> arPelanggan)
    {
        super(context, resource, arPelanggan);

        this.context = context;
        this.resource = resource;
        this.arPelanggan = arPelanggan;

        Log.d("ListAdapter", "Jumlah List c "+arPelanggan.size());
    }

    public AdapterListPelanggan(Context context, int resource, ArrayList<Pelanggan> arPelanggan, boolean status)
    {
        super(context, resource, arPelanggan);

        this.context = context;
        this.resource = resource;
        this.arPelanggan = arPelanggan;
        this.status = status;
    }

    public View getView(final int position, View convertView, ViewGroup parent)
    {
        h = new Holder();
        final Pelanggan pelanggan = arPelanggan.get(position); // Set Data per urutan
        Log.d("ListAdapter", "ID Pelanggan b "+pelanggan.getId_pelanggan()+"");
        if(convertView == null)
        {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(resource, parent, false);

            h.tv_KTP = (TextView)convertView.findViewById(R.id.tv_ktp_isi_lp);
            h.tv_Nama = (TextView)convertView.findViewById(R.id.tv_nama_isi_lp);
            h.syncButton = (ImageView)convertView.findViewById(R.id.syncButton);

            if(status)
            {
                h.syncButton.setVisibility(View.GONE);
            }

            convertView.setTag(h);
        }
        else
        {
            h = (Holder)convertView.getTag();
        }

        // ------------------ Button Sync ------------------

        h.syncButton.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                try
                {
                    db = new DBPelanggan(getContext());
                    db.open();
                    db.updateStatPelanggan(pelanggan);
                    Log.d("ListAdapter", "ID hilang " + pelanggan.getId_pelanggan());
                    arPelanggan.remove(pelanggan);
                    arPelanggan = db.getDataPelanggan();
                    Log.d("ListAdapter", "Jumlah List c "+arPelanggan.size());


         Log.d("ListAdapter", pelanggan.getId_pelanggan()+"ID Sekarang");
                db.close();
                notifyDataSetChanged();
            }
            catch (SQLException e)
            {
                e.printStackTrace();
            }
        }
    });
    // ---------------------------------------------------------------

    h.tv_KTP.setText(pelanggan.getId_pelanggan());
    h.tv_Nama.setText(pelanggan.getNama());

    return convertView;
}


}

问题是当我按textView来获取“ apple”时,确实在db中对其进行了更新并从列表中消失了,但是当我按“ apple”后按了“ orrange”时,我的应用程序给出了错误。

这是我的错误:

11-17 10:34:55.639 5429-5429 / com.example.michael.ims_application_apps E / AndroidRuntime:at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)11-17 10:34:55.639 5429-5429 / com.example.michael.ims_application_apps E / AndroidRuntime:在java.util.ArrayList.get(ArrayList.java:304)11-17 10:34:55.639 5429-5429 / com.example.michael.ims_application_apps E / AndroidRuntime:在com.example.michael.ims_application_apps.AdapterListPelanggan.getView(AdapterListPelanggan.java:63)11-17 10:34:55.639 5429-5429 / com.example.michael.ims_application_apps E / AndroidRuntime:at android.widget.AbsListView.obtainView( AbsListView.java:2260)11-17 10:34:55.639 5429-5429 / com.example.michael.ims_application_apps E / AndroidRuntime:位于android.widget.ListView.makeAndAddView(ListView.java:1769)11-17 10:34 :55.639 5429-5429 / com.example.michael.ims_application_apps E / AndroidRuntime:位于android.widget.ListView.fillDown(ListView.java:672)11-17 10:34:55.639 5429-5429 / com.example.michael。 ims_application_ap ps E / AndroidRuntime:位于android.widget.ListView.fillGap(ListView.java:636)11-17 10:34:55.639 5429-5429 / com.example.michael.ims_application_apps E / AndroidRuntime:位于android.widget.AbsListView。 trackMotionScroll(AbsListView.java:5045)11-17 10:34:55.639 5429-5429 / com.example.michael.ims_application_apps E / AndroidRuntime:在android.widget.AbsListView.scrollIfNeeded(AbsListView.java:3202)11-17 10 :34:55.639 5429-5429 / com.example.michael.ims_application_apps E / AndroidRuntime:位于android.widget.AbsListView.onTouchEvent(AbsListView.java:3476)

任何人都可以建议我如何解决它? 谢谢。

在您的getview中检查以下代码行。 您在position变量中获得什么值,它可能大于数组列表的长度->

final Pelanggan pelanggan = arPelanggan.get(position); 

问题在于这条线,

  arPelanggan = db.getDataPelanggan();

删除后,您正在从db重新加载数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM