簡體   English   中英

單擊按鈕時如何將數據從適配器傳遞到主要活動

[英]How do I pass data from adapter to mainactivity when a button is clicked

我上傳了一些數據到 sqlite,我想通過按下一個按鈕從 recyclerview 中刪除每個數據。 那么我怎樣才能做到這一點? 我想從 recyclerview 獲取 id 到 mainactivity,然后從 sqlite 中刪除數據並更新 reyclerview。 我怎樣才能做到這一點?

主要活動

public class SelectedProblems extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_selecte_problem_drawal);

    mRecyclerView = (RecyclerView) findViewById(R.id.selected_problem_recycle_view); // Instantiate Recyclerview
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
    mRecyclerView.setLayoutManager(linearLayoutManager);
    mRecyclerView.setHasFixedSize(true);
    selectedProblemsAdapter = new SelectedProblemsAdapter(this, getAllItems(),  listener);
    mRecyclerView.setAdapter(selectedProblemsAdapter);

   Button remove = findviewbyid(R.id.remove);
   remove.setOnClickListener(new View.OnClickListener() {

   }
  }

選定問題適配器

  public SelectedProblemsAdapter(Context context, Cursor cursor, OnItemClick listener) {
        this.context = context;
        this.cursor = cursor;
        listener = listener;

    }

    @Override
    public SelectedProblemsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater layoutInflater = LayoutInflater.from(context);
        View view = layoutInflater.inflate(R.layout.activity_selected_problems_content, null, false);
        return new SelectedProblemsViewHolder(view);
    }
    @Override
    public void onBindViewHolder(@NonNull SelectedProblemsViewHolder holder, final int position) {
        if (this.cursor != null){
        }
    }


    @Override
    public int getItemCount() {
        return (null != cursor ? cursor.getCount(): 0);
    }

    public void update(Cursor cursor) {
        this.cursor = cursor;
        notifyDataSetChanged();
    }

    class SelectedProblemsViewHolder extends RecyclerView.ViewHolder{

        TextView selectedProblems, selectedProblemPrice, selectedProblemTotal;
        Button remove_problem_from_cart;
        public SelectedProblemsViewHolder(View itemView) {
            super(itemView);
            selectedProblems = itemView.findViewById(R.id.selected_problems);
            selectedProblemPrice = itemView.findViewById(R.id.selected_problem_price);
            selectedProblemTotal = itemView.findViewById(R.id.selectedProblemTotal);
            remove_problem_from_cart = itemView.findViewById(R.id.remove_problem_from_cart);

        }
    }
}

主要活動

public class SelectedProblems extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_selecte_problem_drawal);

    mRecyclerView = (RecyclerView) findViewById(R.id.selected_problem_recycle_view); // Instantiate Recyclerview
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
    mRecyclerView.setLayoutManager(linearLayoutManager);
    mRecyclerView.setHasFixedSize(true);
    selectedProblemsAdapter = new SelectedProblemsAdapter(this, getAllItems(),  listener);
    mRecyclerView.setAdapter(selectedProblemsAdapter);

   Button remove = findviewbyid(R.id.remove);
   remove.setOnClickListener(new View.OnClickListener() {

   }
  }

選定問題適配器

 public SelectedProblemsAdapter(Context context, Cursor cursor, OnItemClick listener) {
        this.context = context;
        this.cursor = cursor;
        listener = listener;

    }

    @Override
    public SelectedProblemsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater layoutInflater = LayoutInflater.from(context);
        View view = layoutInflater.inflate(R.layout.activity_selected_problems_content, null, false);
        return new SelectedProblemsViewHolder(view);
    }
    @Override
    public void onBindViewHolder(@NonNull SelectedProblemsViewHolder holder, final int position) {
        if (this.cursor != null){
           // it will call your interface method which is implemented in Activity
           holder.yourView_name.setOnClickListener(new View.OnClickListener() {
           listener.yourmethod();
   }
        }
    }


    @Override
    public int getItemCount() {
        return (null != cursor ? cursor.getCount(): 0);
    }

    public void update(Cursor cursor) {
        this.cursor = cursor;
        notifyDataSetChanged();
    }

    class SelectedProblemsViewHolder extends RecyclerView.ViewHolder{

        TextView selectedProblems, selectedProblemPrice, selectedProblemTotal;
        Button remove_problem_from_cart;
        public SelectedProblemsViewHolder(View itemView) {
            super(itemView);
            selectedProblems = itemView.findViewById(R.id.selected_problems);
            selectedProblemPrice = itemView.findViewById(R.id.selected_problem_price);
            selectedProblemTotal = itemView.findViewById(R.id.selectedProblemTotal);
            remove_problem_from_cart = itemView.findViewById(R.id.remove_problem_from_cart);

        }
    }
}

您可以通過實現接口來實現它。

第 1 步:創建一個帶有抽象函數的接口,該函數將數據類型作為其參數。

public interface OnDataItemClickListener {

        void onItemClick(YourItem yourItem);

    }

第 2 步:使 Activity 實現接口並覆蓋其方法。

public class SelectedProblems extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_selecte_problem_drawal);

    mRecyclerView = (RecyclerView) findViewById(R.id.selected_problem_recycle_view); // 
    //Instantiate Recyclerview
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
    mRecyclerView.setLayoutManager(linearLayoutManager);
    mRecyclerView.setHasFixedSize(true);
    selectedProblemsAdapter = new SelectedProblemsAdapter(this, getAllItems());
    mRecyclerView.setAdapter(selectedProblemsAdapter);

  
  }

  @Override
    public void onItemClick(YourItem yourItem) {


}

第 3 步:通過適配器的構造函數傳遞接口。

//Global variable of the interface 
private onDataItemClickListener  onclickListner;

// while instatiating the adapter
 selectedProblemsAdapter = new SelectedProblemsAdapter(this, getAllItems(), onClickListener);

第四步:在 onBindViewHolder 方法中,使用接口實例(通過構造函數接收)來調用方法,這將有助於將數據傳遞給主活動/活動。

     public SelectedProblemsAdapter(Context context, Cursor cursor, OnDataItemClickListener listener) {
            this.context = context;
            this.cursor = cursor;
            listener = listener;
    
        }
    
        @Override
        public SelectedProblemsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            LayoutInflater layoutInflater = LayoutInflater.from(context);
            View view = layoutInflater.inflate(R.layout.activity_selected_problems_content, null, false);
            return new SelectedProblemsViewHolder(view);
        }
        @Override
        public void onBindViewHolder(@NonNull SelectedProblemsViewHolder holder, final int position) {
            if (this.cursor != null){
              holder.yourView.setOnClickListener(new View.OnClickListener() {

    // onItemClick is the abstract function present in the interface.
               listener.onItemClicked(" your data item ");

    // here the data item/position etc, which you want to delete will be passed on to the main acticity.
       }
            }
        }

       @Override
        public int getItemCount() {
            return (null != cursor ? cursor.getCount(): 0);
        }
    
        public void update(Cursor cursor) {
            this.cursor = cursor;
            notifyDataSetChanged();
        }
    
        class SelectedProblemsViewHolder extends RecyclerView.ViewHolder{
    
            TextView selectedProblems, selectedProblemPrice, selectedProblemTotal;
            Button remove_problem_from_cart;
            public SelectedProblemsViewHolder(View itemView) {
                super(itemView);
                selectedProblems = itemView.findViewById(R.id.selected_problems);
                selectedProblemPrice = itemView.findViewById(R.id.selected_problem_price);
                selectedProblemTotal = itemView.findViewById(R.id.selectedProblemTotal);
                remove_problem_from_cart = itemView.findViewById(R.id.remove_problem_from_cart);
    
            }
        }
    }

第五步:最后在主activity中編寫通過重寫的接口方法刪除對象的代碼。

    @Override
        public void onItemClick(YourItem yourItem) {
    
    yourItem.delete();
    // you can use any number of functions to perform with your dataItem here.
 
selectedProblemsAdapter.update()
//call your update function here to change the list in recycler view.

    }

注意:如果您使用的是視圖模型和實時數據,則無需編寫 notifyDataSetChanged() 函數。數據會自動更新。

這將幫助您刪除或對您的數據執行任意數量的操作,這些數據從您的適配器傳遞到主要活動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM