亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何向每個 recyclerview 項目的按鈕添加功能?

如何向每個 recyclerview 項目的按鈕添加功能?

月關寶盒 2023-07-28 16:53:50
我正在編寫一個android代碼,其中單擊recyclerview上的按鈕時,它應該將其定向到其他一些活動。程序應該將控制重定向到每個 recyclerview 項目的不同活動。我已成功將按鈕添加到活動模板中,但是,我無法理解如何向每個按鈕添加功能。我隨函附上我已包含在該項目中的不同文件。如果有人可以指導我如何從這里繼續,那將非常有幫助。ProductPage1.javapackage com.agnik.example.myapplication4;import androidx.appcompat.app.AppCompatActivity;import androidx.recyclerview.widget.LinearLayoutManager;import androidx.recyclerview.widget.RecyclerView;import android.os.Bundle;import java.util.ArrayList;public class ProductPage1 extends AppCompatActivity {    private RecyclerView mRecyclerView;    private RecyclerView.Adapter mAdapter;    private RecyclerView.LayoutManager mLayoutManager;    @Overrid    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_product_page1);        ArrayList<ExampleItem> exampleList = new ArrayList<>();        exampleList.add(new ExampleItem(R.drawable.mickeymouse, "Line1" , "Line2"));        exampleList.add(new ExampleItem(R.drawable.donalduck, "Line3" , "Line4"));        exampleList.add(new ExampleItem(R.drawable.popey, "Line5" , "Line6"));        exampleList.add(new ExampleItem(R.drawable.mickeymouse, "Line1" , "Line2"));        exampleList.add(new ExampleItem(R.drawable.donalduck, "Line3" , "Line4"));        exampleList.add(new ExampleItem(R.drawable.popey, "Line5" , "Line6"));        exampleList.add(new ExampleItem(R.drawable.mickeymouse, "Line1" , "Line2"));        exampleList.add(new ExampleItem(R.drawable.donalduck, "Line3" , "Line4"));        exampleList.add(new ExampleItem(R.drawable.popey, "Line5" , "Line6"));        exampleList.add(new ExampleItem(R.drawable.mickeymouse, "Line1" , "Line2"));        exampleList.add(new ExampleItem(R.drawable.donalduck, "Line3" , "Line4"));        exampleList.add(new ExampleItem(R.drawable.popey, "Line5" , "Line6"));    }}
查看完整描述

4 回答

?
慕少森

TA貢獻2019條經驗 獲得超9個贊

您必須在 ExampleAdapter 的 onBindViewHolder 方法內執行此操作。


作為一個例子,你可以這樣做:


@Override

public void onBindViewHolder(@NonNull ExampleViewHolder holder, int position) {


    ExampleItem currentItem = mExampleList.get(position);

    holder.mImageView.setImageResource(currentItem.getImageResource());

    holder.mTextView1.setText(currentItem.getText1());

    holder.mTextView2.setText(currentItem.getText2());

    holder.mButton.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                // your code here

            }

    });


}

在 onBindViewHolder() 方法內部“邏輯發生”。在那里您可以為每個 RecyclerView 項目設置所有內容。


查看完整回答
反對 回復 2023-07-28
?
明月笑刀無情

TA貢獻1828條經驗 獲得超4個贊

此代碼在單擊的每個項目上顯示一個對話框


@NonNull

? ? @Override

? ? public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

? ? ? ? LayoutInflater inflater = LayoutInflater.from(parent.getContext());

? ? ? ? View view = inflater.inflate(R.layout.recycler_item, null);

? ? ? ? final ItemViewHolder viewHolder = new ItemViewHolder(view);

? ? ? ? dialoge = new Dialog(parent.getContext());

? ? ? ? dialoge.setContentView(R.layout.dialog);

? ? ? ? dialoge.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

? ? ? ? viewHolder.container.setOnClickListener(new View.OnClickListener() {

? ? ? ? ? ? @Override

? ? ? ? ? ? public void onClick(View view) {

? ? ? ? ? ? ? ? setDialog(dialoge, viewHolder);

? ? ? ? ? ? ? ? dialoge.show();

? ? ? ? ? ? }


? ? ? ? });


? ? ? ? return viewHolder;

? ? }

在方法 setDialog() 中,您可以使用以下方法獲取當前項目位置


final RecyclerItem currentItem = itemList.get(viewHolder.getAdapterPosition());

但我認為最好的做法是考慮使用接口,可以遵循tutorialRecyclerItemOnClickListenerInterface

我希望這可以幫助你

編輯:從 onClickListnere 啟動活動:

Intent?myIntent?=?new?Intent(parent.getContext(),yourActivityName.class);
????????????????myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
????????????????context.startActivity(myIntent);


查看完整回答
反對 回復 2023-07-28
?
躍然一笑

TA貢獻1826條經驗 獲得超6個贊

您需要創建一個與普通點擊偵聽器類似的界面,但它也有位置作為參數。

public interface RecyclerViewClickListener { 
   void onClick(View view, int position);
}

然后你可以在你的適配器中聲明

private final RecyclerViewClickListener listener;

您可以在適配器中創建一個設置器

public void setListner(RecyclerViewClickListener listener){
this.listener=listener;
}


查看完整回答
反對 回復 2023-07-28
?
慕斯王

TA貢獻1864條經驗 獲得超2個贊

您必須將回調接口添加到適配器中,并將該接口的實例從活動傳遞到適配器構造函數。當您單擊 recyclerview 項的不同 ViewGroup 時調用接口的方法,并且 Activity 中應該有一個實現。你的代碼看起來像這樣


活動


    public class ProductPage1 extends AppCompatActivity implements ClickCallback {


        private RecyclerView mRecyclerView;

        private RecyclerView.Adapter mAdapter;

        private RecyclerView.LayoutManager mLayoutManager;


        @Override

        protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);

            setContentView(R.layout.activity_product_page1);


            ArrayList<ExampleItem> exampleList = new ArrayList<>();

            exampleList.add(new ExampleItem(R.drawable.mickeymouse, "Line1" , "Line2"));

            exampleList.add(new ExampleItem(R.drawable.donalduck, "Line3" , "Line4"));

            exampleList.add(new ExampleItem(R.drawable.popey, "Line5" , "Line6"));

            exampleList.add(new ExampleItem(R.drawable.mickeymouse, "Line1" , "Line2"));

            exampleList.add(new ExampleItem(R.drawable.donalduck, "Line3" , "Line4"));

            exampleList.add(new ExampleItem(R.drawable.popey, "Line5" , "Line6"));

            exampleList.add(new ExampleItem(R.drawable.mickeymouse, "Line1" , "Line2"));

            exampleList.add(new ExampleItem(R.drawable.donalduck, "Line3" , "Line4"));

            exampleList.add(new ExampleItem(R.drawable.popey, "Line5" , "Line6"));

            exampleList.add(new ExampleItem(R.drawable.mickeymouse, "Line1" , "Line2"));

            exampleList.add(new ExampleItem(R.drawable.donalduck, "Line3" , "Line4"));

            exampleList.add(new ExampleItem(R.drawable.popey, "Line5" , "Line6"));


            mRecyclerView = findViewById(R.id.recyclerView);

            mRecyclerView.setHasFixedSize(true);

            mLayoutManager = new LinearLayoutManager(this);

            mAdapter = new ExampleAdapter(exampleList);


            mRecyclerView.setLayoutManager(mLayoutManager);

            mRecyclerView.setAdapter(mAdapter);


        }


       @Override

       onItemClick(int position, View view){

        switch(view.getId()){

           case R.id.mImageView:

         //do your view click events here

            break;

           case R.id.mImageView2:

         //do your view click events here

           break;

         //so on

       }

 }

適配器


public class ExampleAdapter extends RecyclerView.Adapter<ExampleAdapter.ExampleViewHolder> {


    private ArrayList<ExampleItem> mExampleList;



    public static class ExampleViewHolder extends RecyclerView.ViewHolder

    {

        public ImageView mImageView;

        public TextView mTextView1;

        public TextView mTextView2;

        public Button mButton;


        public ExampleViewHolder(@NonNull View itemView,ClickCallback clickCallback) {

            super(itemView);

this.clickCallback=clickCallback;

            mImageView = itemView.findViewById(R.id.imageView);

            mTextView1 = itemView.findViewById(R.id.textView);

            mTextView2 = itemView.findViewById(R.id.textView2);

            mButton = itemView.findViewById(R.id.mybutton);



        }

    }


    public ExampleAdapter(ArrayList<ExampleItem> exampleList)

    {


        mExampleList = exampleList;


    }


    @NonNull

    @Override

    public ExampleViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {


        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.example_item, parent, false);

        ExampleViewHolder evh = new ExampleViewHolder(v);

        return evh;


    }


    @Override

    public void onBindViewHolder(@NonNull ExampleViewHolder holder, int position) {


        ExampleItem currentItem = mExampleList.get(position);

        holder.mImageView.setImageResource(currentItem.getImageResource());

        holder.mTextView1.setText(currentItem.getText1());

        holder.mTextView2.setText(currentItem.getText2());


holder.mImageView.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

              clickCallback.onItemClick(position, holder.mImageView);

            //and same for other views

             }


    }


    @Override

    public int getItemCount() {

        return mExampleList.size();


    }



    public interface ClickCallback{

        void onItemClick(int position, View view);

         //here you can send the object of the list at the position if you require 

         //that in activity


    }

}

希望你得到答案??鞓肪幋a:)


查看完整回答
反對 回復 2023-07-28
  • 4 回答
  • 0 關注
  • 208 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號