簡體   English   中英

如何從適配器訪問arrayList到活動?

[英]How to access an arrayList from an adapter to an activity?

我在適配器中創建了一個方法。 在這種方法中,我有一個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);
    }
}

我想從適配器獲取邀請arraylist到sendInvite圖像視圖的onClickListener。

我怎樣才能做到這一點? 謝謝..

在適配器中編寫一個get方法,然后從您的活動中調用它。

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

在你的活動中你可以得到這個,你的yourAdapterObject.getArrayList();

您還可以使用interface將數據從adpater類發送到活動。 它在下面的鏈接中得到了很好的描述。

使用接口將數據從適配器傳遞到活動

創建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);

            }
        });

它可能對你有幫助:)

快樂編碼:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM