【问题标题】:How can I pass these Array List values between two activities?如何在两个活动之间传递这些数组列表值?
【发布时间】:2020-03-08 12:18:23
【问题描述】:

我正在尝试将几个值从活动“Example”传递给另一个活动“MemberExample.class”

我知道这似乎是一个简单的问题,之前已经回答过很多次了,但是如下面的代码所示,我将尝试解释一下,它似乎并不像看起来那么容易。

下面是我尝试传递的第一个活动代码,但它从回收器视图适配器获取“mImagesUrl”、“mName”、“mParties”。我不确定我打算在哪一个类中放置“putIntent”和“getExtras”方法。我是把它们放在 RecyclerView 适配器还是活动类中?

Example.class

public class Example extends AppCompatActivity {

    private ArrayList<String> mNames = new ArrayList<>();
    private ArrayList<String> mParties = new ArrayList<>();
    private ArrayList<String> mImageUrls = new ArrayList<>();

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


        getImages();
    }

    private void getImages() {


        mImageUrls.add("https://data.oireachtas.ie/ie/oireachtas/member/id/Kathleen-Funchion.D.2016-10-03/image/large");
        mNames.add("Kathleen Funchion");
        mParties.add("Sinn Féin");

        mImageUrls.add("https://data.oireachtas.ie/ie/oireachtas/member/id/John-Paul-Phelan.S.2002-09-12/image/large");
        mNames.add("John Paul Phelan");
        mParties.add("Fine Gael");



        initExampleRV();
    }

    private void initExampleRV() {

        LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
        RecyclerView recyclerView = findViewById(R.id.rv_Example);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(this, MemberExample.class);

//?????????????????????



            }

        });
        ClareMembersRecyclerView adapter = new ClareMembersRecyclerView(this, mNames, mParties, mImageUrls);
        recyclerView.setAdapter(adapter);
    }
}

适配器类

public class RecyclerView extends RecyclerView.Adapter<ClareMembersRecyclerView.ViewHolder>{


    private  static final  String TAG = "ClareMembersRV";

    //vars
    private ArrayList<String> mNames = new ArrayList<>();
    private ArrayList<String> mParties = new ArrayList<>();
    private ArrayList<String> mImageUrls = new ArrayList<>();
    private Context mContext;

    public RecyclerView(Context context, ArrayList<String> names, ArrayList<String> parties, ArrayList<String> imageUrls){

        mNames = names;
        mParties = parties;
        mImageUrls = imageUrls;
        mContext = context;
    }
    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        Log.d(TAG, "onCreateViewHolder: called.");

        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_members_clare, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    Log.d(TAG, "onBindViewHolder: called.");

    Glide.with(mContext)
            .asBitmap()
            .load(mImageUrls.get(position))
            .into(holder.image);

    holder.name.setText(mNames.get(position));

    holder.party.setText(mParties.get(position));

    holder.image.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.d(TAG, "onClick: clicked on an image" + mNames.get(position));
            Toast.makeText(mContext, "Profile: " + mNames.get(position), Toast.LENGTH_SHORT).show();
            Intent intent = new Intent(mContext, MembersMapDetailed.class);
            intent.putExtra(mNames.get(position),mParties,mImageUrls);
                    }
    });
    }

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

    public class ViewHolder extends RecyclerView.ViewHolder{

        CircleImageView image;
        TextView name;
        TextView party;

        public ViewHolder(View itemView) {
            super(itemView);
            image = itemView.findViewById(R.id.imgClareCircle);
            name = itemView.findViewById(R.id.tvClareName);
            party = itemView.findViewById(R.id.tvClareParty);
        }
    }

【问题讨论】:

  • 您想将所有姓名、派对和图片网址传递给其他活动吗?那么recyclerview跟它有什么关系呢?另外,您是否有意在活动中的整个回收视图上设置了 onclicklistener?

标签: android android-intent android-activity android-recyclerview


【解决方案1】:

如果你想开始一个新的活动并在用户点击回收视图的任何地方传递这些值,你可以这样做:

recyclerView.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
     Intent intent = new Intent(this, MemberExample.class);
     intent.putExtra("EXTRA_KEY_NAMES", mNames);
     intent.putExtra("EXTRA_KEY_PARTIES", mParties);
     intent.putExtra("EXTRA_KEY_IMAGES", mImageUrls);
     startActivity(intent);
  }

如果你想开始一个新的活动并传递值,基于用户在上一个活动中点击的项目,你可以使用onItemClickListener。我认为它更有用,这是您想要做的,但也许我错了。:

recyclerView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
     Intent intent = new Intent(this, MemberExample.class);
     intent.putExtra("EXTRA_KEY_NAME", mNames.get(position);
     intent.putExtra("EXTRA_KEY_PARTY", mParties.get(position));
     intent.putExtra("EXTRA_KEY_IMAGE", mImageUrls.get(position));
     startActivity(intent);
  }

要从新活动的意图中获取这些值,您需要在 MemberExample.class 中编写这部分代码:

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

        Intent intent = getIntent();
        ArrayList<String> mNames = intent.getStringArrayListExtra("EXTRA_KEY_NAMES");
        ArrayList<String> mParties = intent.getStringArrayListExtra("EXTRA_KEY_PARTIES");
        ArrayList<String> mImageUrls = intent.getStringArrayListExtra("EXTRA_KEY_IMAGES");
        // Or in second proposed by me solution (with passing single item):
        //String mName = intent.getStringExtra("EXTRA_KEY_NAME");
        //String mParty = intent.getStringExtra("EXTRA_KEY_PARTY");
        //String mImage = intent.getStringExtra("EXTRA_KEY_IMAGE");
}

【讨论】:

  • “recyclerView.setOnItemClickListener”中的“setOnItemClickListener”正在创建错误,即使我已经实现了该方法。你知道为什么吗?顺便谢谢你的帮助
  • 让我们编辑您的问题并粘贴一些代码。
猜你喜欢
  • 1970-01-01
  • 2013-07-22
  • 1970-01-01
  • 2013-05-12
  • 1970-01-01
  • 2019-05-02
  • 1970-01-01
  • 2013-12-31
  • 1970-01-01
相关资源
最近更新 更多