如何使用从适配器到其他类的bundle?

时间:2018-06-09 18:40:30

标签: android

我的情况是使用从适配器到活动类的数据。 代码可以是 -

Intent in = new Intent(context, TargetActivity.class);
getIntent().putExtra("mykey", myVariable);
startActivity(in);

但我不希望在该活动中打开TargetActivity。只需传递价值。

也试过这个 -

     Bundle b = new Bundle();
     b.putString("mykey", ""+myvariable);
     Obj.setArguments(b);

在使用目标fragment_obj将数据从活动传递到片段时,我使用了上述内容。 但是如何实现(适配器到活动)。帮帮我。

这是来自RecyclerView适配器的onBindViewHolder的代码

 @Override
 public void onBindViewHolder(MyViewHolder holder, final int position) {

    final MyQues mq = qdatalist.get(position);
    holder.tv_qid.setText(mq.getqNo()+"");
    holder.tv_quesOnList.setText(mq.getQues());

    String quesNum = mq.getqNo()+"";

现在我想要的是将String quesNum的值发送到其他活动,我必须使用该密钥从firebase读取一些数据。 我无法从那里的数据库模型中获取它,因为仅使用基于位置的密钥进一步生成firebase密钥。因此,我必须使用相同的方法来根据位置读取哪些变化。

因此尝试将其发送到其他活动,我将其用作从firebase读取数据的密钥。

2 个答案:

答案 0 :(得分:0)

因此,您必须在Recycler View上设置onClickListener。当用户单击某个项目时,将其位置和quesNum传递给主要活动,并使用intent将它们传递给另一个活动。使用接口在Recycler视图上实现单击侦听器。

在适配器类中,创建要在单击侦听器上设置的接口,并执行: -

public class Holder extends RecyclerView.ViewHolder
    {
        public TextView tv;

        public Holder(View itemView)
        {
            super(itemView);

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

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v)
                {
                    if(listener != null)
                    {
                        int position = getAdapterPosition();

                        if(position != RecyclerView.NO_POSITION)
                        {
                            listener.onItemClicked(position, OTHER_VALUE);
                        }
                   }
                }
            }
        }
 }

并在您的主要活动中执行:

public void onItemClicked(int position, String value)
    {
       // Toast.makeText(this, "You Clicked " + position, Toast.LENGTH_SHORT).show();

      //Create Intent Here

    }

答案 1 :(得分:0)

好的..我做了那个@Raj,&得到了MainActivity的值,但在将其再次发送到其他活动时,我得到了空指针异常。这是代码:

MainActivity

@Override  public void onClick(String quesNum) {
//Toast.makeText(this, ""+quesNum, Toast.LENGTH_SHORT).show();
Intent in = new Intent(MainActivity.this, UserResponseListActivity.class);  
 getIntent().putExtra("quesNum",""+quesNum);  
 startActivity(in); 

关于其他活动:

Bundle b = getIntent().getExtras();  
String qvalue = (String) b.get("quesNum"); //error line

但问题是使用LocalBroadcastManager解决的。

适配器:

Intent intent = new Intent("ques");
 intent.putExtra("qn",quesNumb);

 LocalBroadcastManager.getInstance(context).sendBroadcast(intent);

目标活动:

onCreate(Bundle savedInstanceState){
 ...

 LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
            new IntentFilter("ques"));
  }

public BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
        @Override
    public void onReceive(Context context, Intent intent) {

       String qvalue = intent.getStringExtra("qn");

        Toast.makeText(UserResponseListActivity.this,"Number"+qvalue ,Toast.LENGTH_SHORT).show();
    }
};

那有效但不知道为什么我的第一个解决方案会出现空指针异常,这也应该有效,对吧?任何的想法? @Raj