2017-09-07 2 views
0

RecylerViewアダプタ内の変数とメソッドにアクセスできますか? 私はOnbindViewHolderに使用するアクティビティから変数にアクセスする必要があり、別のアクティビティのメソッドにもアクセスする必要があります。だから誰も私が使用しているコードが動作していないので、それを正しく行う方法を私に示すことができます。ここでRecyclerViewアダプタ内のアクティビティから変数とメソッドにアクセスする方法

は、RecyclerViewアダプタのコード

public class db_adapter extends RecyclerView.Adapter<db_adapter.pet_viewholder> implements View.OnLongClickListener, View.OnClickListener 
{ 

    ArrayList<db_getItem> items; 
    Context ctx; 
    HomeActivity homeActivity; 
    public db_adapter(Context ctx,ArrayList<db_getItem> items) { 
      this.items=items; 
      this.ctx=ctx; 
      homeActivity=(HomeActivity)ctx; 
    } 

    @Override 
    public pet_viewholder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.reg_view_pet, parent, false); 
     return new pet_viewholder(view,homeActivity); 

    } 
    public void add(db_getItem pet) { 
     items.add(0, pet); 
     notifyItemInserted(0); 

    } 

    @Override 
    public int getItemViewType(int position) { 
     return super.getItemViewType(position); 
    } 

    @Override 
    public void onBindViewHolder(final pet_viewholder holder, final int position) { 
     holder.pet_name.setText(items.get(position).getPet_name()); 
     holder.pet_breed.setText(items.get(position).getPet_breed()); 
     holder.pet_age.setText(items.get(position).getPet_age()); 
     holder.pet_bday.setText(items.get(position).getPet_bday()); 
       String beagle="Beagle"; 
       String bulldog="Bull Dog"; 
       String chow="Chow chow"; 
       String chihua="Chihuahua"; 
       String german="German Shepherd"; 
       String golden="Golden Retriever"; 
       String havanese="Havanese"; 
       String labrador="Labrador Retriever"; 
       String shitzu="Shitzu"; 
       String pug="Pug"; 

       final String breed=items.get(position).getPet_breed(); 
       if(beagle.equals(breed)){ 
        holder.pet_image.setImageResource(R.drawable.beagle); 
       }else if(bulldog.equals(breed)){ 
        holder.pet_image.setImageResource(R.drawable.bulldog); 
       }else if(chow.equals(breed)){ 
        holder.pet_image.setImageResource(R.drawable.chow_chow); 
       }else if(chihua.equals(breed)){ 
        holder.pet_image.setImageResource(R.drawable.chichua); 
       }else if(german.equals(breed)){ 
        holder.pet_image.setImageResource(R.drawable.german_shepherd); 
       }else if(golden.equals(breed)){ 
        holder.pet_image.setImageResource(R.drawable.golden_retriever); 
       }else if(havanese.equals(breed)){ 
        holder.pet_image.setImageResource(R.drawable.havanese); 
       }else if(labrador.equals(breed)){ 
        holder.pet_image.setImageResource(R.drawable.labrador); 
       }else if(pug.equals(breed)){ 
        holder.pet_image.setImageResource(R.drawable.pug); 
       }else if(shitzu.equals(breed)) { 
        holder.pet_image.setImageResource(R.drawable.shitzu); 
       } 
    } 

    @Override 
    public boolean onLongClick(View v) { 
     return false; 
    } 

    @Override 
    public void onClick(View v) { 
    } 
    @Override 
    public int getItemCount() { 
     return items.size(); 
    } 

    public static class pet_viewholder extends RecyclerView.ViewHolder { 
     CheckBox chregis_pet; 
     TextView pet_name; 
     TextView pet_breed; 
     TextView pet_age; 
     TextView pet_bday; 
     ImageView pet_image; 
     RecyclerView recyclerView; 
     View view; 
     CardView cardView; 
     HomeActivity homeActivity; 
     Context data_context; 

     public pet_viewholder(View itemView,Context data_context) { 
      super(itemView); 
      this.data_context=data_context; 
      this.homeActivity=(HomeActivity)data_context; 
      this.view=itemView.findViewById(R.id.view); 
      pet_name=(TextView)itemView.findViewById(R.id.name_pet); 
      pet_breed=(TextView)itemView.findViewById(R.id.breed_pet); 
      pet_age=(TextView)itemView.findViewById(R.id.age_pet); 
      pet_bday=(TextView)itemView.findViewById(R.id.bday_pet); 
      pet_image=(ImageView) itemView.findViewById(R.id.pic_breed); 
      recyclerView=(RecyclerView)itemView.findViewById(R.id.reg_pet); 
      cardView=(CardView)itemView.findViewById(R.id.pet_card); 
      chregis_pet=(CheckBox)itemView.findViewById(R.id.chkregis_pet); 

     } 

    } 
} 
+0

あなたのアダプタを呼び出すアクティビティからのコールバックを渡します –

+0

あなたはコード内のアクティビティを使用していません。何が問題なのですか? –

答えて

0

は、あなたの活動は、この後

public class SomeActivity implements SomeInterface { 
your code here 
} 

のように、このインターフェイスを実装します

public interface SomeInterface { 
void someMethodFromActivity(); 
} 

そこで、このようなインタフェースクラスを作成していますあなたがあなたのアダプターをアクティビティーから呼び出すところから、コンテキストとarraylistが渡されたときに、あなたのこのようなコールバックメソッド。

これを使用して既にコンテキストとarrarylistを渡していることに注意してください。このコールバックも追加する必要があります。お使いのアダプタクラスでは、このようなあなたのコンストラクタを変更、

private SomeInterface listener; 
public db_adapter(Context ctx,ArrayList<db_getItem> items,SomeInterface listener) { 
     this.listener=listener; 
     this.items=items; 
     this.ctx=ctx; 
     homeActivity=(HomeActivity)ctx; 
} 

今、あなたはあなたの活動に)

listener.someMethodFromActivity(); 

はsomeMethodFromActivityを(定義することを忘れないでください、のようなあなたの活動のいずれかのメソッドを呼び出すために、このリスナーメソッドを使用することができますクラス

関連する問題