2016-09-05 2 views
0

У меня есть класс, который расширяет ArrayAdapter<String>. Я хочу, чтобы кнопка удаления изображения удаляет конкретную строку .. Это мой код:Как удалить строку из ListView с кнопкой удаления в строке

public class ViewCartList extends ArrayAdapter<String> { 

    private String[] cart_item_name; 
    private String[] cart_item_quan; 
    private String[] cart_item_price; 
    private Activity context; 


    public ViewCartList(Activity context, String[] cartitemquan, String[] cartitemname,String[] cartitemprice){ 
     super(context,R.layout.viewcartlist,cartitemquan); 
     this.context = context; 
     this.cart_item_quan = cartitemquan; 
     this.cart_item_name = cartitemname; 
     this.cart_item_price = cartitemprice; 

    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = context.getLayoutInflater(); 
     final View listViewItem = inflater.inflate(R.layout.viewcartlist, null, true); 

     TextView textViewItemQuan = (TextView) listViewItem.findViewById(R.id.cart_quan); 
     TextView textViewItemName = (TextView) listViewItem.findViewById(R.id.cart_item_name); 
     TextView textViewItemPrice = (TextView) listViewItem.findViewById(R.id.cart_item_price); 
     ImageButton imcut = (ImageButton) listViewItem.findViewById(R.id.remove_row); 

     textViewItemQuan.setText(cart_item_quan[position]); 
     textViewItemName.setText(cart_item_name[position]); 
     textViewItemPrice.setText(cart_item_price[position]); 
     imcut.setVisibility(View.VISIBLE); 

     imcut.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       // I want to delete that particular row 
      } 
     }); 

     return listViewItem; 
    } 
} 

И Это мой Basket класса, где я использую этот выше класс адаптера. Что делать, если я хочу, чтобы удалить определенную строку из ListView от этой кнопки удаления приведенного выше ..

public class Basket extends AppCompatActivity implements View.OnClickListener { 

    TextView cartview; 
    MyCartDatabse myDatabase; 
    SQLiteDatabase sql; 
    ContentValues cv; 
    String wr; 
    ListView list; 
    public static String[] quan =null; 
    public static String[] itemname=null; 
    public static String[] baseprice=null; 
    TextView edit_order; 
    public boolean imrow; 
    ViewCartList vc; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.basket); 


     myDatabase = new MyCartDatabse(this,"mydb",null,1); 
     sql = myDatabase.getWritableDatabase(); 
     cv = new ContentValues(); 
     list = (ListView)findViewById(R.id.listcart); 
     getRecords(); 

     edit_order = (TextView)findViewById(R.id.edit_order); 
     edit_order.setOnClickListener(this); 
    } 

    public void getRecords(){ 
     sql = myDatabase.getReadableDatabase(); 
     Cursor cursor = sql.rawQuery("select * from cart ",null); 
     quan = new String[cursor.getCount()]; 
     itemname = new String[cursor.getCount()]; 
     baseprice = new String[cursor.getCount()]; 

     int i = 0; 
     if(cursor.getCount()>0){ 
      while(cursor.moveToNext()){ 
       String uquan = cursor.getString(5); 
       String uname = cursor.getString(1); 
       String uprice = cursor.getString(4); 

       quan[i] = uquan; 
       itemname[i] = uname; 
       baseprice[i] = uprice; 
       i++; 

      } 
      vc = new ViewCartList(this,quan,itemname,baseprice); 
      list.setAdapter(vc); 
     } 
     else{ 
      // Do something 
     } 

     cursor.close(); 
    } 

    @Override 
    public void onClick(View view) { 
     edit_order.setText("Apply Changes"); 
    } 
} 
+1

Вы не можете удалить любой элемент из массива строк, Массивы в Java не являются динамическими, вы можете использовать ArrayList вместо этого. –

+1

Вы должны изменить имя класса, что-то вроде ViewCartAdapter (ваш класс представляет адаптер, а не список) –

ответ

0

Массивы имеют фиксированную длину и не может быть изменен после создания. Вы можете установить элемент на null, чтобы удалить ссылку на объект;

imcut.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       // I want to delete that particular row 
       cart_item_name[position] = null; 
       cart_item_quan[position]= null; 
       cart_item_price[position] = null; 
       notifydatasetchanged(); 
      } 
     }); 
1

Если вы хотите полностью удалить элемент, который следует использовать List<String> вместо Array

Здесь обновляется код для списка

public class ViewCartList extends ArrayAdapter<String> { 

    private List<String> cart_item_name; // Use List here 
    private List<String> cart_item_quan; // Use List here 
    private List<String> cart_item_price; // Use List here 
    private Activity context; 

    public ViewCartList(Activity context, List<String> cartitemquan, List<String> cartitemname,List<String> cartitemprice){ 
     super(context, R.layout.viewcartlist,cartitemquan); 
     this.context = context; 
     this.cart_item_quan = cartitemquan; 
     this.cart_item_name = cartitemname; 
     this.cart_item_price = cartitemprice; 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = context.getLayoutInflater(); 
     final View listViewItem = inflater.inflate(R.layout.viewcartlist, null, true); 

     TextView textViewItemQuan = (TextView) listViewItem.findViewById(R.id.cart_quan); 
     TextView textViewItemName = (TextView) listViewItem.findViewById(R.id.cart_item_name); 
     TextView textViewItemPrice = (TextView) listViewItem.findViewById(R.id.cart_item_price); 
     ImageButton imcut = (ImageButton) listViewItem.findViewById(R.id.remove_row); 

     textViewItemQuan.setText(cart_item_quan.get(position)); 
     textViewItemName.setText(cart_item_name.get(position)); 
     textViewItemPrice.setText(cart_item_price.get(position)); 
     imcut.setVisibility(View.VISIBLE); 

     imcut.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       // I want to delete that particular row 
       cart_item_quan.remove(position); 
       cart_item_name.remove(position); 
       cart_item_price.remove(position); 

       notifyDataSetChanged(); 
      } 
     }); 

     return listViewItem; 
    } 
} 
+0

Thanku Sir для ответа ур. Но, пожалуйста, посмотрите мой обновленный код и помогите мне. –

1

Элегантный подход к вашей проблеме, чтобы передать ArrayList объекта к вашему Adapter, а затем обработайте действие удаления.

Таким образом, вы можете подумать о создании такого объекта.

public class Cart { 
    public String cart_item_name; 
    public String cart_item_quan; 
    public String cart_item_price; 
} 

Возьмем теперь ArrayList этого класса и заполнить ArrayList передать в Adapter.

public class ViewCartList extends BaseAdapter { 

    private Context context; 
    private ArrayList<Cart> mCartList; 

    public ViewCartList(Context context, ArrayList<Cart> mCartList) { 
     this.context = context; 
     this.mCartList = mCartList; 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = context.getLayoutInflater(); 
     final View listViewItem = inflater.inflate(R.layout.viewcartlist, null, true); 

     TextView textViewItemQuan = (TextView) listViewItem.findViewById(R.id.cart_quan); 
     TextView textViewItemName = (TextView) listViewItem.findViewById(R.id.cart_item_name); 
     TextView textViewItemPrice = (TextView) listViewItem.findViewById(R.id.cart_item_price); 
     ImageButton imcut = (ImageButton) listViewItem.findViewById(R.id.remove_row); 

     textViewItemQuan.setText(mCartList.get(position).cart_item_quan); 
     textViewItemName.setText(mCartList.get(position).cart_item_name); 
     textViewItemPrice.setText(mCartList.get(position).cart_item_price); 

     // Remove the following and set the visibility true from the layout. 
     // imcut.setVisibility(View.VISIBLE); 

     imcut.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       // Delete the row 
       mCartList.remove(position); 
       notifyDatasetChanged(); 
      } 
     }); 

     return listViewItem; 
    } 
} 
+0

позиция должна быть окончательной, так как вы не можете получить к ней доступ во внутреннем классе –

+0

Благодарим за комментарий. Отредактировал ответ. –

+0

Благодарим вас за ответ. Но, пожалуйста, помогите мне, я обновил свой код. –

0

общественного класса ViewCartList расширяет ArrayAdapter {

private String[] cart_item_name; 
private String[] cart_item_quan; 
private String[] cart_item_price; 
private Activity context; 


public ViewCartList(Activity context, String[] cartitemquan, String[] cartitemname,String[] cartitemprice){ 
    super(context,R.layout.viewcartlist,cartitemquan); 
    this.context = context; 
    this.cart_item_quan = cartitemquan; 
    this.cart_item_name = cartitemname; 
    this.cart_item_price = cartitemprice; 

} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    LayoutInflater inflater = context.getLayoutInflater(); 
    final View listViewItem = inflater.inflate(R.layout.viewcartlist, null, true); 

    TextView textViewItemQuan = (TextView) listViewItem.findViewById(R.id.cart_quan); 
    TextView textViewItemName = (TextView) listViewItem.findViewById(R.id.cart_item_name); 
    TextView textViewItemPrice = (TextView) listViewItem.findViewById(R.id.cart_item_price); 
    ImageButton imcut = (ImageButton) listViewItem.findViewById(R.id.remove_row); 

    textViewItemQuan.setText(cart_item_quan[position]); 
    textViewItemName.setText(cart_item_name[position]); 
    textViewItemPrice.setText(cart_item_price[position]); 
    imcut.setVisibility(View.VISIBLE); 
    imcut.setTag(position); 
    imcut.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      // I want to delete that particular row 
     int pos = Integer.parseInt(view.getTag().toString()); 
     mCartList.remove(position); 
     notifyDatasetChanged(); 
     } 
    }); 

    return listViewItem; 
} 

}

Смежные вопросы