【问题标题】:How to access an arrayList from an adapter to an activity?如何从适配器访问 arrayList 到活动?
【发布时间】:2016-10-04 06:55:07
【问题描述】:

我在适配器中创建了一种方法。在这种方法中,我有一个数组列表。我想在活动中访问这个 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,并在执行onclick时通过适配器对象简单地访问arraylist
  • In this method I have an arraylist。不,那个arraylist 在你的适配器类中。就像方法一样。

标签: java android android-activity arraylist adapter


【解决方案1】:

在您的适配器中编写一个 get 方法,然后从您的活动中调用它。

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

在你的活动中,你可以得到这个,yourAdapterObject.getArrayList();

【讨论】:

    【解决方案2】:

    您还可以使用接口将数据从 adpater 类发送到活动。 它在下面的链接中描述得很漂亮。

    Pass Data from adapter to activity using interface

    【讨论】:

      【解决方案3】:

      将 ivitearraylist 创建为公共并通过 adpater 访问活动。

       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);
          }
      

      活动代码: 访问invitationArrayList 作为adapter.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);
      
                  }
              });
      

      可能对你有帮助:)

      快乐编码:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-08
        • 1970-01-01
        • 2012-06-10
        • 1970-01-01
        相关资源
        最近更新 更多