2016-09-05 13 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

を拡張あなたは代わりのArrayListを使用することができ、Javaで 配列は動的なものではなく、文字列配列から任意の項目を削除することはできません。 –

+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

感謝の気持ちで感謝します。しかし、私の更新されたコードを見て、私を助けてください。 –

1

更新され、あなたの問題のためのエレガントなアプローチが渡すことですオブジェクトのArrayListAdapterに追加し、削除アクションを処理します。

このようにオブジェクトを作成することを検討することもできます。

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

今、そのクラスのArrayListを取り、あなたのAdapterに渡すArrayListを取り込みます。

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

}

関連する問題