1

我需要調用一個新活動,當我的一個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

回答

1

您可以在適配器類中調用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

    0

    正如你看到的,你不必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) 
    
        } 
    
    相關問題