2014-10-29 2 views
1

У меня есть вид списка с адаптером пользовательского массива. Я хочу удалить элемент, когда нажата кнопка «Удалить». Но я не могу это исправить. Даже мое приложение умирает, когда я нажимаю кнопку удаления. Я понятия не имею. Мои коды следующим образом-Как удалить строку списка, нажав кнопку в каждой строке LISTVIEW

Код: -

package com.abc_fragment; 

import java.util.ArrayList; 

import com.abc.R; 

import android.content.Context; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.Button; 
import android.widget.ImageButton; 
import android.widget.TextView; 
import android.widget.Toast; 

public class Fragment_ListviewContactAdapter extends BaseAdapter 
{ 
private static ArrayList listDetail; 
private LayoutInflater mInflater; 
Context context; 
public Fragment_ListviewContactAdapter(Context Fragment, ArrayList results) 
{ 
listDetail = results; 
mInflater = LayoutInflater.from(Fragment); 

} 




@Override 
public int getCount() 
{ 
// TODO Auto-generated method stub 
return listDetail.size(); 
} 

@Override 
public Object getItem(int arg0) { 
// TODO Auto-generated method stub 
return listDetail.get(arg0); 
} 

@Override 
public long getItemId(int arg0) 
{ 
// TODO Auto-generated method stub 
return arg0; 
} 

@SuppressWarnings("unused") 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
// TODO Auto-generated method stub 
ViewHolder holder; 
if(convertView == null) 
{ 

convertView = mInflater.inflate(R.layout.fragment_listitem, null); 
holder = new ViewHolder(); //Atomholderpayment 
// holder.ListviewDashBoard = listDetail.get(position); 


holder.orderno = (TextView) convertView.findViewById(R.id.OrderNo_text); 
holder.dispatchTo = (TextView) convertView.findViewById(R.id.dispatchTo_text); 
holder.dealerN = (TextView) convertView.findViewById(R.id.dealerName_text); 
holder.orderT = (TextView) convertView.findViewById(R.id.order_text); 
holder.amountT = (TextView) convertView.findViewById(R.id.Amount_text); 
holder.removeButton = (Button)convertView.findViewById(R.id.button_delete); 
//holder.removeButton.setTag(holder.ListviewDashBoard); 
//holder.removeButton.setOnClickListener((OnClickListener) this); 
//convertView.setOnClickListener(new OnItemClickListener(position)); 
convertView.setTag(holder); 
/* holder.removeButton.setOnClickListener(new OnClickListener() 
{ 

@Override 
public void onClick(View v) 
{ 
int pos = (Integer) v.getTag(); 
listDetail.remove(pos); 
Fragment_ListviewContactAdapter.this.notifyDataSetChanged(); 
} 
// TODO Auto-generated method stub 

});*/ 


} else 
{ 
holder = (ViewHolder) convertView.getTag(); 
} 
Fragment_listViewDashboard ListviewDashBoard =listDetail.get(position); 
holder.orderno.setText(listDetail.get(position).getOrderno()); 
holder.dispatchTo.setText(listDetail.get(position).getDispatchTo()); 
holder.dealerN.setText(listDetail.get(position).getDealerN()); 
holder.orderT.setText(listDetail.get(position).getOrderT()); 
holder.amountT.setText(listDetail.get(position).getAmountT()); 
holder.removeButton.setOnClickListener(new OnClickListener() 
{ 

@Override 
public void onClick(View v) 
{ 
// TODO Auto-generated method stub 

Log.i("Delete Button Clicked", "*************************************************"); 
Toast.makeText(context, "Delete button Clicked", 
Toast.LENGTH_LONG).show(); 
} 
}); 

return convertView; 
} 

static class ViewHolder 
{ 
TextView orderno, dispatchTo, dealerN,orderT, amountT ; 
Button removeButton; 


} 

} 
+0

U пройти ArrayList адаптер так, когда и нажмите на ListView удалить элемент из Arraylist и обновить Adapter –

+1

Try вызвать listDetail.remove (положение); и после вызова notifyDataSetChanged(); –

+0

Существует много примеров проектов, связанных со удалением – Hasnain

ответ

4

Try таким образом, надеюсь, это поможет вам решить ваши проблема.

Сначала определите положение, как в GetView финале() параметр а затем попытаться удалить элемент списка из вас список обладатель данных listDetail с помощью удалить метод и уведомить адаптер с помощью notifyDataSetChanged метод как:

holder.removeButton.setOnClickListener(new OnClickListener() 
{ 
    @Override 
    public void onClick(View v) 
    { 
     listDetail.remove(position); 
     notifyDataSetChanged(); 
     Log.i("Delete Button Clicked",*************************************************"); 
     Toast.makeText(context, "Delete button Clicked",Toast.LENGTH_LONG).show(); 
    } 
}); 
3

При нажатии на кнопку Удалить реализовать ниже код:

YOURLISTVIEW.removeViewAt(position); 
YOURARRAY.remove(position); 
YOURADAPTER.notifyDataSetChanged(); 
0

Когда вы нажимаете кнопку удаления ..., вы должны выполнить эти действия 1. Удалить элемент из массива l ist или array или database .... 2. Затем обновите экран компоновки, снова отобразив список .... (поместите весь код списка отображения в метод, а затем снова его вызовите) ...

Надежда это поможет вам .....

2

OnClick из удаления кнопки сначала нужно удалить позицию из вашего ArrayList, а затем уведомить адаптер, как:

holder.removeButton.setOnClickListener(new OnClickListener(){ 
@Override 
    public void onClick(View v){ 
     _arrayList.remove(position); 
     notifyDataSetChanged(); 
    } 
}); 

Или вы можете сделать метод для сброса адаптера в ваш список похож:

public void _resetAdapter(ArrayList<String> _list){ 
    // Set your adapter here and pass _list in your adapter 
} 

И называют этот метод, как:

holder.removeButton.setOnClickListener(new OnClickListener(){ 
    @Override 
    public void onClick(View v){ 
     _arrayList.remove(position); 
     _resetAdapter(_arrayList); 
    } 
});