从回收站视图行中的项目调用新活动

问题描述:

我需要调用一个新活动,当我的一个recyclerview行元素中的按钮被调用时。列表中的每一行都包含4个按钮,其中一个按钮需要打开一个新的活动,该活动将用于编辑该行中的数据。从回收站视图行中的项目调用新活动

这是迄今为止对我的按钮的代码:

​​

因为我需要,我打开返回用户输入的数据对我来说,我使用startActivityForResult活动。但是,据我所知,这只会在实际的活动课堂中发挥作用。

所以然后我尝试将mainactivity上下文传递给我的CounterLayoutAdapter类,其中我的所有按钮代码都是。但是,OnBindViewHolder方法仍然无法在那里访问它。所以我试图将上下文传递给OnBindViewHolder,但这也不起作用,因为它不会覆盖抽象类,如果我这样做。

那么,我怎么可以在这里调用一个新的活动?

或者,如果有其他方法可以将用户输入到4个字段并将该输入返回到适配器,而无需调用活动,那也可以。

编辑:viewholder和布局通胀

public static class ViewHolder extends RecyclerView.ViewHolder implements 
    View.OnClickListener { 
     private TextView name; 
     private TextView comment; 
     private TextView number; 
     //private TextView date; 



     public ViewHolder(View itemView) { 
      super(itemView); 
      itemView.setOnClickListener(this); 

      comment = itemView.findViewById(R.id.textComment); 
      name = itemView.findViewById(R.id.textName); 
      number = itemView.findViewById(R.id.editTextNum); 
      //date = itemView.findViewById(R.id.textDate); 

     } 

     @Override 
     public void onClick(View view) {} 
    } 


    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View inflatedView = 
    LayoutInflater.from(parent.getContext()).inflate(R.layout 
     .row_layout, parent, false); 
     return new ViewHolder(inflatedView); 
    } 
+0

你膨胀任何布局? –

+0

是的,我膨胀我的布局,我将该代码添加到帖子。 – user2782067

您可以在适配器类中调用startActivityForResult()。在适配器像Context context=holder.up.getContext();

  • 然后在按钮的OnClickListener

    • 获取上下文做到这一点。

      edit.setOnClickListener(new View.OnClickListener() { 
          @Override 
          public void onClick(View view) { 
           Intent intent=new Intent(context,ActivityYouWantToStart.class); 
           //Pass any extras if you want to. 
           ((Activity)context).startActivityForResult(intent,REQUEST_CODE); 
          } 
      }); 
      
    • 然后在你的活动(包含此recyclerView)覆盖onActivityResult这样

      @Override 
      protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
          if (requestCode == REQUEST_CODE) {//same REQUEST_CODE you used in adapter 
      
           if (resultCode == RESULT_OK) { 
      
            //Do your thing and get the data you want. 
      
            adapter.onDataReady(Data data);//where adapter is your recycler adapter, 
                    //and data is whatever data you want to pass to adapter 
                    //(Data you got from the activityResult, do not confuse it with onActivityResult's parameter 'Intent data') 
           } 
          } 
      } 
      
    • 最后,在你的回收站适配器类,这样定义

      public void onDataReady(Data data){ 
          //Update RecyclerView with new data 
      } 
      
    onDataReady()功能

    希望这有助于。我曾经这样做过,它对我有用。如果您有任何问题,请告诉我。

  • +0

    获取上下文的方法不起作用,但onDataReady函数无论如何解决了我的问题。 – user2782067

    正如你看到的,你不必findViewByIdonBindViewHolder

    public void onBindViewHolder(CounterLayoutAdapter.ViewHolder holder, final 
    int position) { 
    final Counter counter = counterList.get(position); 
    //counter is a class which holds the data that will be displayed on one 
    //row 
    
    String comment = counter.getComment(); 
    String name = counter.getCounterName(); 
    int number = counter.getCurrentValue(); 
    //LocalDate modifyDate = counter.getLastModifyDate(); 
    
    
    holder.edit.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 
        } 
    }); 
    

    那么你应该在ViewHolder构造函数初始化edit

    public ViewHolder(View itemView) { 
         super(itemView); 
         itemView.setOnClickListener(this); 
    
         comment = itemView.findViewById(R.id.textComment); 
         name = itemView.findViewById(R.id.textName); 
         number = itemView.findViewById(R.id.editTextNum); 
         //date = itemView.findViewById(R.id.textDate); 
         // init four button 
         edit = itemView.findViewById(R.id.buttonEdit) 
    
        }