2017-03-08 21 views
1

recyclerViewの中の画像削除ボタンをクリックするとデータベースから項目を削除する必要があります。Recyclerで実装されたボタンクリックでSqliteからデータを削除する方法

これはバスケット活動です BasketMain.java package in.haazir.haazir.basket;

  import android.app.ActionBar; 
      import android.content.Intent; 
      import android.support.v7.app.AppCompatActivity; 
      import android.os.Bundle; 
      import android.support.v7.widget.DefaultItemAnimator; 
      import android.support.v7.widget.DividerItemDecoration; 
      import android.support.v7.widget.LinearLayoutManager; 
      import android.support.v7.widget.RecyclerView; 
      import android.support.v7.widget.Toolbar; 
      import android.util.Log; 
      import android.view.Menu; 
      import android.view.MenuItem; 
      import android.view.View; 
      import android.widget.ImageButton; 
      import android.widget.ListView; 
      import android.widget.Toast; 

      import java.util.ArrayList; 
      import java.util.List; 
      import java.util.jar.Attributes; 

      import in.haazir.haazir.R; 
      import in.haazir.haazir.demo; 
      import in.haazir.haazir.recycleviewlistner.RecyclerTouchListener; 
      import in.haazir.haazir.sqllitedatabase.DatabaseOperations; 

      public class BasketMain extends AppCompatActivity { 

       private RecyclerView haazirBasket; 
       DatabaseOperations basketobj; 
       List<DataofBasket> data=new ArrayList<>(); 
       AdapterBasket mAdapter; 
       AdapterBasket mAdapter2; 
       private Toolbar mToolbar; 
       DataofBasket dob = new DataofBasket(); 
       public int counter=0; 

       public String name; 
       @Override 
       protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_basket_main); 
        //deletecartitem = (ImageButton)findViewById(R.id.basketdeleteitembtn); 
        this.setTitle("Basket"); 
        this.getSupportActionBar().setDisplayHomeAsUpEnabled(true); // we use this when we use app compact else if we use actionbar then "this.getActionBar().setDisplayHomeAsUpEnabled(true);" 
        haazirBasket = (RecyclerView) findViewById(R.id.basketmain); 
        haazirBasket.setLayoutManager(new LinearLayoutManager(BasketMain.this)); 
        haazirBasket.setItemAnimator(new DefaultItemAnimator()); 
        //haazirService.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL)); 
        haazirBasket.addItemDecoration(new in.haazir.haazir.recycleviewlistner.DividerItemDecoration(getApplicationContext())); 
        basketobj = new DatabaseOperations(this); 
        data = basketobj.getAllProducts(); 
        mAdapter = new AdapterBasket(BasketMain.this,data); 

        haazirBasket.setAdapter(mAdapter); 



        haazirBasket.addOnItemTouchListener(new RecyclerTouchListener(getApplicationContext(), haazirBasket, new RecyclerTouchListener.ClickListener() { 
         @Override 
         public void onClick(View view, int position) { 
          Toast.makeText(getApplicationContext(), "clicked", Toast.LENGTH_SHORT).show(); 
          // mAdapter.deleteListener(getApplicationContext()); 

          DataofBasket dob = data.get(position); 
          name = dob.serviceName; 
          // mAdapter2 = new AdapterBasket(name,getApplicationContext()); 
          /*if (counter > 0) { 
           float r = basketobj.DeletRecord(name); 
           Log.e("deletItem: ", "" + r); 
           data = basketobj.getAllProducts(); 
           mAdapter = new AdapterBasket(BasketMain.this, data); 

           haazirBasket.setAdapter(mAdapter); 
          }*/ 
         } 



         @Override 
         public void onLongClick(View view, int position) { 

         } 
        })); 



       } 
       String getName() 
       { 
        return name; 
       } 

       void updateCounter() 
       { 
        counter++; 
       } 
       void deletItem(int pos) 
       { 
          // mAdapter.deleteListener(getApplicationContext()); 
        data = basketobj.getAllProducts(); 
        DataofBasket dob = data.get(pos); 
        name = dob.serviceName; 

          float r =basketobj.DeletRecord(name); 
          Log.e("deletItem: ",""+r); 
          data = basketobj.getAllProducts(); 
          mAdapter = new AdapterBasket(BasketMain.this, data); 

          haazirBasket.setAdapter(mAdapter); 

         } 




       @Override 
       public boolean onCreateOptionsMenu(Menu menu) { 
        // Inflate the menu; this adds items to the action bar if it is present. 
        getMenuInflater().inflate(R.menu.menu_main, menu); 
        return true; 
       } 

       @Override 
       public boolean onOptionsItemSelected(MenuItem item) { 
        // Handle action bar item clicks here. The action bar will 
        // automatically handle clicks on the Home/Up button, so long 
        // as you specify a parent activity in AndroidManifest.xml. 
        switch (item.getItemId()) { 
         case android.R.id.home: 
          // app icon in action bar clicked; goto parent activity. 
          this.finish(); 
          return true; 
         case R.id.action_settings: 
          return true; 
         case R.id.cart: 
          return true; 
         default: 
          return super.onOptionsItemSelected(item); 

        } 

       } 



      } 

これは私がrecyclerViewに使用アダプタです。

AdapterBasket.java パッケージin.haazir.haazir.basket;

  /** 
      * Created by Dell on 3/4/2017. 
      */ 
      import android.content.Context; 
      import android.support.v7.widget.RecyclerView; 
      import android.util.Log; 
      import android.view.LayoutInflater; 
      import android.view.View; 
      import android.view.ViewGroup; 
      import android.widget.ImageView; 
      import android.widget.TextView; 

      import com.bumptech.glide.Glide; 

      import java.util.Collections; 
      import java.util.List; 

      import in.haazir.haazir.R; 
      import in.haazir.haazir.haazirservices.DataofServices; 
      import android.content.Context; 
      import android.support.v7.widget.RecyclerView; 
      import android.view.LayoutInflater; 
      import android.view.View; 
      import android.view.ViewGroup; 
      import android.widget.Button; 
      import android.widget.ImageButton; 
      import android.widget.ImageView; 
      import android.widget.TextView; 
      import android.widget.Toast; 
      import android.widget.ToggleButton; 

      import com.bumptech.glide.Glide; 

      import java.util.Collections; 
      import java.util.List; 

      import in.haazir.haazir.R; 
      import in.haazir.haazir.haazirservices.DataofServices; 
      import in.haazir.haazir.sqllitedatabase.DatabaseOperations; 

      /** 
      * Created by hp.com on 10-02-2017. 
      */ 
      public class AdapterBasket extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 

       public Context context; 
       private LayoutInflater inflater; 
       List<DataofBasket> data= Collections.emptyList(); 
       DataofBasket current; 
       DataofBasket current1; 
       int currentPos=0; 
       public int count = 1; 
       DatabaseOperations dbobj; 
       MyHolder holder; 
       public String name; 


       // create constructor to innitilize context and data sent from MainActivity 
       public AdapterBasket(Context context, List<DataofBasket> data){ 
        this.context=context; 
        inflater= LayoutInflater.from(context); 
        this.data=data; 
       } 

       public AdapterBasket(String name, Context context){ 
        this.name=name; 
        inflater= LayoutInflater.from(context); 

       } 
       // Inflate the layout when viewholder created 
       @Override 
       public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
        View view=inflater.inflate(R.layout.container_basket, parent,false); 
        holder=new MyHolder(view); 
        return holder; 
       } 

       // Bind data 
       @Override 
       public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 

        // Get current position of item in recyclerview to bind data and assign values from list 
        final MyHolder myHolder = (MyHolder) holder; 
        current = data.get(position); 
        myHolder.textServiceName.setText(current.serviceName); 


        // load image into imageview using glide 
        Glide.with(context).load(current.serviceImage) 
          .placeholder(R.drawable.grocery) 
          .error(R.drawable.maggie) 
          .into(myHolder.serviceImageHaazir); 
      /*myHolder.deletecartitem.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Log.e("onClick: ","button clicked "+current.serviceName); 
        DatabaseOperations basketobj = new DatabaseOperations(context); 
        BasketMain bm = new BasketMain(); 
        float r =basketobj.DeletRecord(current.serviceName); 
        Log.e("onClick: ",""+r); 
        //data = basketobj.getAllProducts(); 
        //AdapterBasket ad = new AdapterBasket(context, data); 

        //ad.setAdapter(mAdapter); 
       } 
      }); 

      */ 
       } 
       // return total item from List 
       @Override 
       public int getItemCount() { 
        return data.size(); 
       } 

       public void delete(int position) { //removes the row 
        current1 = data.get(position); 
        Log.e("onClick: ","button clicked "+current1.serviceName); 
        BasketMain bm = new BasketMain(); 
        //bm.deletItem(current1.serviceName); 
        //bm.updateCounter(); 
        DatabaseOperations dbo = new DatabaseOperations(context); 
        float r = dbo.DeletRecord(name); 
        Log.e("deletItem: ", "" + r); 
        //data = dbo.getAllProducts(); 

        //data.remove(position); 
        //notifyItemRemoved(position); 
       } 




       class MyHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ 

        TextView textServiceName; 
        ImageView serviceImageHaazir; 
        ImageButton deletecartitem; 

        // create constructor to get widget reference 
        public MyHolder(View itemView) { 
         super(itemView); 
         textServiceName = (TextView) itemView.findViewById(R.id.productdisplatnameidbasket); 
         serviceImageHaazir = (ImageView) itemView.findViewById(R.id.imagebasket); 

         deletecartitem = (ImageButton) itemView.findViewById(R.id.basketdeleteitmebutton); 
         deletecartitem.setOnClickListener(this); 
        } 

        @Override 
        public void onClick(View view) { 
         BasketMain bm = new BasketMain(); 
         bm.deletItem(getAdapterPosition()); 
         delete(getAdapterPosition()); 
        } 
       } 




      } 
+0

特定のアイテムのカーソルIDを取得し、DBからraw全体を削除します。 –

答えて

1

が正しいことができます最初のコード:

1)あなたは活動のリサイクルビューを示しています。それは、活動が存在することを意味します。新しいアクティビティのインスタンスを作成する必要はありません。 MyHolderのonClickメソッドで作成したものです。このBasketMainを削除します。bm = new BasketMain();あなたが正しいデータと活動のメソッドを呼び出すために成功したら、あなたはそれらの上に好きな操作を行うことができます)

i. implement own interface in an activity 

ii. pass this reference while initiating adapter 

iii. pass it to MyHolder, so that in the onclick you can call activity method like activityReference.deleteItem(int position); 

iv. You can set tag of current (DataofBasket) to deleteitem button. so that you will get the clicked item's data in the onclick() method. 

3活性の参照を渡す

2)。

0

私は答えを得ました。 アダプタのコンストラクタ内でコンテキストを必要とするオブジェクトを初期化するだけで済みます。なぜなら、他の場所で使用されているコンテキストではNULLポインタ例外が発生するからです。

関連する問題