2016-10-04 5 views
1

アダプターに1つのメソッドを作成しました。この方法で私はarraylistを持っています。私はアクティビティでこのarrayListにアクセスしたいです。これどうやってするの?アダプターからアクティビティーへのarrayListへのアクセス方法は?

アダプタ:

public class InviteAdapter extends RecyclerView.Adapter<InviteAdapter.MyViewHolder> { 

    private ArrayList<Contact> contactArrayList; 
    private Context mContext; 

    public class MyViewHolder extends RecyclerView.ViewHolder { 
     public TextView name; 
     private CheckBox checkBox; 

     public MyViewHolder(View view) { 
      super(view); 
      name = (TextView) view.findViewById(R.id.textContactName); 
      checkBox = (CheckBox) view.findViewById(R.id.checkBox); 

     } 
    } 

    public InviteAdapter(Context context, ArrayList<Contact> contactArrayList) { 
     this.contactArrayList = contactArrayList; 
     this.mContext = context; 

    } 

    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View itemView = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.invite_contact_item, parent, false); 

     return new MyViewHolder(itemView); 
    } 

    @Override 
    public void onBindViewHolder(MyViewHolder holder, int position) { 
     Contact contact = contactArrayList.get(position); 
     holder.name.setText(contact.getmFullName()); 

     holder.checkBox.setChecked(contact.getSelected()); 
    } 

    @Override 
    public int getItemCount() { 
     return contactArrayList.size(); 
    } 



    public void toggleContactsSelection(boolean isSelected) { 
     for(Contact contact : contactArrayList) { 
      contact.setSelected(isSelected); 

      invite(contact); 
     } 
     notifyDataSetChanged(); // OR you can use notifyItemRangeChanged - which ever suits your needs 
    } 

    public void invite(Contact contact) 
    { 

     ArrayList<Invitation> invitationArrayList = new ArrayList<>(); 

     SharedPreferences sharedpreferences = mContext.getSharedPreferences("UserId", Context.MODE_PRIVATE); 

     String mUserId = sharedpreferences.getString("userId",""); 

     DateFormat df = new SimpleDateFormat("EEE, d MMM yyyy, HH:mm", Locale.ENGLISH); 
     String date = df.format(Calendar.getInstance().getTime()); 

     Invitation invitation = new Invitation(); 

     invitation.setSender_id(mUserId); 
     invitation.setDate(date); 
     invitation.setInvitee_no(contact.getmMobileNo()); 
     invitation.setStatus("0"); 
     invitation.setUser_name(contact.getmUserName()); 

     invitationArrayList.add(invitation); 
    } 
} 

私は、アダプタの招待方法から招待状配列のリストにアクセスしたいです。

活動:

public class InviteContactsActivity extends AppCompatActivity { 

    private RecyclerView mRecyclerView; 
    private InviteAdapter mAdapter; 
    private ArrayList<Contact> mContactList; 
    private ContactTableHelper mContactDb; 
    private ArrayList<Invitation> invitationArrayList; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_invite_contacts); 


     final ImageView selectAll = (ImageView)findViewById(R.id.imageMenu); 

     selectAll.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       PopupMenu popup = new PopupMenu(InviteContactsActivity.this,selectAll); 

       popup.getMenuInflater().inflate(R.menu.pop_up_menu, popup.getMenu()); 

       popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 
        public boolean onMenuItemClick(MenuItem item) { 

         mAdapter.toggleContactsSelection(true); //Selects all contacts 
         return true; 
        } 
       }); 

       popup.show(); 
      } 
     }); 


     ImageView sendInvites = (ImageView)findViewById(R.id.imageSelect); 

     sendInvites.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       Gson gson=new Gson(); 
       String toServer = gson.toJson(
         Collections.singletonMap("invitations", invitationArrayList) 
       ); 

       new SendMultipleInvitesAsyncTask(InviteContactsActivity.this).execute(toServer); 

      } 
     }); 

     mContactDb = new ContactTableHelper(InviteContactsActivity.this); 

     mContactList = mContactDb.getAllContacts(); 

     mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view); 

     mRecyclerView.setHasFixedSize(true); 
     RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(InviteContactsActivity.this); 
     mRecyclerView.setLayoutManager(mLayoutManager); 
     mRecyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL)); 
     mRecyclerView.setItemAnimator(new DefaultItemAnimator()); 

     mAdapter = new InviteAdapter(InviteContactsActivity.this, mContactList); 
     mRecyclerView.setAdapter(mAdapter); 
    } 
} 

私はsendInviteイメージビューのonClickListenerにアダプタから招待のArrayListを取得したいです。

どうすればいいですか?ありがとう..

+1

アダプタ内部のArrayListに公開し、私はarraylist'を持っている。この方法では、 'onclickの – Aditi

+0

を行いながら、単にアダプタオブジェクトでのArrayListにアクセスします。いいえ、あなたのアダプタークラスにはその作家がいます。方法が好きです。 – greenapps

答えて

6

あなたのアダプタの中にgetメソッドを書いて、あなたのアクティビティから呼び出す。あなたはこのような得ることができ、あなたの活動の中に

public ArrayList<Object> getArrayList(){ 
    return yourArrayList; 
    } 

yourAdapterObject.getArrayList();

+1

ありがとうございます:-) @Alex Chengalan – Sid

0

特殊なアダプタを介した活動の公共・アクセスとしてivitearraylist作成します。

ArrayList<Invitation> invitationArrayList = new ArrayList<>(); 

public void invite(Contact contact) 
    { 



     SharedPreferences sharedpreferences = mContext.getSharedPreferences("UserId", Context.MODE_PRIVATE); 

     String mUserId = sharedpreferences.getString("userId",""); 

     DateFormat df = new SimpleDateFormat("EEE, d MMM yyyy, HH:mm", Locale.ENGLISH); 
     String date = df.format(Calendar.getInstance().getTime()); 

     Invitation invitation = new Invitation(); 

     invitation.setSender_id(mUserId); 
     invitation.setDate(date); 
     invitation.setInvitee_no(contact.getmMobileNo()); 
     invitation.setStatus("0"); 
     invitation.setUser_name(contact.getmUserName()); 

     invitationArrayList.add(invitation); 
    } 

アクティビティコード:adapter.invitationArrayListとして アクセスinvitationArrayList。

ImageView sendInvites = (ImageView)findViewById(R.id.imageSelect); 

     sendInvites.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       Gson gson=new Gson(); 
       String toServer = gson.toJson(
         Collections.singletonMap("invitations", mAdpater.invitationArrayList) 
       ); 

       new SendMultipleInvitesAsyncTask(InviteContactsActivity.this).execute(toServer); 

      } 
     }); 

それはあなたに役に立つかもしれません:)

ハッピーコーディング:)

1

あなたはまた、活動に特殊なアダプタクラスからデータを送信するためのインタフェースを使用することができます。 それは下記のリンクで美しく説明されています。

Pass Data from adapter to activity using interface

関連する問題