[英]Remove item from ArrayAdapter
我正在尝试实现删除项(因为它说明了当用户在每个项目中按textView时,将Android中的listView从0更新为1。例如:
有3个项目
在每个项目中都有一个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.