Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从适配器访问活动的arrayList?_Java_Android_Android Activity_Arraylist_Adapter - Fatal编程技术网

Java 如何从适配器访问活动的arrayList?

Java 如何从适配器访问活动的arrayList?,java,android,android-activity,arraylist,adapter,Java,Android,Android Activity,Arraylist,Adapter,我在适配器中创建了一个方法。在这个方法中,我有一个arraylist。我想在活动中访问此arrayList。我该怎么做 适配器: public class InviteAdapter extends RecyclerView.Adapter<InviteAdapter.MyViewHolder> { private ArrayList<Contact> contactArrayList; private Context mContext;

我在适配器中创建了一个方法。在这个方法中,我有一个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);
    }
}
公共类InviteAdapter扩展了RecyclerView.Adapter{ 私人ArrayList联系人ArrayList; 私有上下文; 公共类MyViewHolder扩展了RecyclerView.ViewHolder{ 公共文本视图名称; 私有复选框; 公共MyViewHolder(视图){ 超级(视图); name=(TextView)view.findViewById(R.id.textContactName); checkBox=(checkBox)view.findviewbyd(R.id.checkBox); } } 公共适配器(上下文上下文,ArrayList contactArrayList){ this.contactArrayList=contactArrayList; this.mContext=上下文; } @凌驾 公共MyViewHolder onCreateViewHolder(视图组父级,int-viewType){ View itemView=LayoutInflater.from(parent.getContext()) .充气(R.layout.invite\u contact\u item,parent,false); 返回新的MyViewHolder(itemView); } @凌驾 公共无效onBindViewHolder(MyViewHolder,int位置){ Contact Contact=contactArrayList.get(位置); holder.name.setText(contact.getmFullName()); holder.checkBox.setChecked(contact.getSelected()); } @凌驾 public int getItemCount(){ 返回contactArrayList.size(); } 公共无效切换联系人选择(布尔值为已选择){ 用于(联系人:contactArrayList){ 联系人:setSelected(isSelected); 邀请(联系); } notifyDataSetChanged();//或者您可以使用notifyItemRangeChanged-这非常适合您的需要 } 公开作废邀请(联系人) { ArrayList invitationArrayList=新建ArrayList(); SharedReferences SharedReferences=mContext.getSharedReferences(“UserId”,Context.MODE\u PRIVATE); String mUserId=sharedpreferences.getString(“userId”,”); DateFormat df=新的SimpleDateFormat(“EEE,d MMM yyyy,HH:mm”,Locale.ENGLISH); 字符串date=df.format(Calendar.getInstance().getTime()); 邀请=新邀请(); 邀请函:setSender_id(mUserId); 邀请。设定日期(日期); invitation.setInvitee_no(contact.getmMobileNo()); 邀请。设置状态(“0”); invitation.setUser_name(contact.getmUserName()); 邀请列表。添加(邀请); } } 我想从适配器的invite方法访问邀请数组列表

活动:

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);
    }
}
public class InviteContactsActivity扩展了AppCompative活动{
私人回收视图mRecyclerView;
私有适配器mAdapter;
私有ArrayList mContactList;
私有ContactTableHelper mContactDb;
私人ArrayList邀请赛ArrayList;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u invite\u contacts);
最终图像视图选择All=(图像视图)findViewById(R.id.imageMenu);
selectAll.setOnClickListener(新建视图.OnClickListener(){
@凌驾
公共void onClick(视图){
PopupMenu popup=新建PopupMenu(邀请联系人活动,选择All);
popup.getMenuInflater().充气(R.menu.pop_up_menu,popup.getMenu());
setOnMenuItemClickListener(新的PopupMenu.OnMenuItemClickListener(){
公共布尔onMenuItemClick(菜单项){
mAdapter.toggleContactsSelection(true);//选择所有联系人
返回true;
}
});
popup.show();
}
});
ImageView SendInvests=(ImageView)findViewById(R.id.imageSelect);
SendInvests.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
Gson Gson=新的Gson();
字符串toServer=gson.toJson(
收藏。单件地图(“邀请”,邀请列表)
);
新建SendMultipleInvitesAsyncTask(InviteContactsActivity.this).execute(toServer);
}
});
mContactDb=新的ContactTableHelper(InviteContactsActivity.this);
mContactList=mContactDb.getAllContacts();
mRecyclerView=(RecyclerView)findViewById(R.id.recycler\u视图);
mRecyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager mLayoutManager=新建LinearLayoutManager(InviteContactsActivity.this);
mRecyclerView.setLayoutManager(mllayoutmanager);
mRecyclerView.addItemDecoration(新的DividerItemDecoration(这个,LinearLayoutManager.VERTICAL));
setItemAnimator(新的DefaultItemAnimator());
mAdapter=newinviteadapter(InviteContactsActivity.this,mContactList);
mRecyclerView.setAdapter(mAdapter);
}
}
我想从sendInvite图像视图的onClickListener适配器获取邀请arraylist


我该怎么做?谢谢..

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

    public ArrayList<Object> getArrayList(){
    return yourArrayList;
  }
public ArrayList getArrayList(){
返回您的ArrayList;
}

在您的活动中,您可以得到如下内容,
yourAdapterObject.getArrayList()

将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);
    }
这可能会对您有所帮助:)


快乐编码:)

您还可以使用该接口将数据从adpater类发送到活动。 下面的链接对其进行了漂亮的描述


在适配器内公开arraylist,并在执行onclick
时通过适配器对象访问arraylist。在这种方法中,我有一个arraylist
。否。该arraylist在适配器类中。像
 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);

            }
        });