简体   繁体   English

回收器视图中的Imageview在每个位置加载相同的图像

[英]Imageview in Recycler view loads the same image in every position

I had Created a MainActivity which includes a RecyclerView . 我创建了一个MainActivity,其中包括一个RecyclerView。 then Onclick it will go to detailActivity page. 然后Onclick它将转到detailActivity页面。 I had created an array of textviews and an image values in class Projects. 我在Projects类中创建了一个textviews数组和一个图像值。 Here every textview is working correctly according to the Recyclerview position. 在这里,每个Textview都根据Recyclerview的位置正常工作。 But. 但。 Here my problem is all imageviews in the recycler view is loading the same Image. 在这里,我的问题是回收者视图中的所有imageviews都加载相同的Image。

MainActivity.java MainActivity.java

package com.tutsplus.code.sharedelementtransition;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;

import jp.wasabeef.recyclerview.animators.LandingAnimator;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        RecyclerView rv = (RecyclerView) findViewById(R.id.rv); // layout reference
        LinearLayoutManager llm = new LinearLayoutManager(this);
        rv.setLayoutManager(llm);
        rv.setItemAnimator(new LandingAnimator());
        rv.setHasFixedSize(true); // to improve performance




        rv.setAdapter(new DataManager()); // the data manager is assigner to the RV
        rv.addOnItemTouchListener( // and the click is handled
            new RecyclerClickListener(this, new RecyclerClickListener.OnItemClickListener() {
                @Override public void onItemClick(View view, int position) {
                    Intent intent = new Intent(MainActivity.this, DetailsActivity.class);
                    intent.putExtra(DetailsActivity.ID, Projects.PROJECTS[position].getId());
                    startActivity(intent);
                }
                }));
    }

    }

DetailActivty.java DetailActivty.java

package com.tutsplus.code.sharedelementtransition;

import android.app.Activity;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;


public class DetailsActivity extends Activity {

    public final static String ID = "ID";
    public Projects mProjects;

    public TextView mName, mPhone, mEmail, mCity;

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

        // Retrieve data
        mProjects = Projects.getItem(getIntent().getIntExtra(ID, 0));

        // Views
        mName = (TextView) findViewById(R.id.DETAILS_name);
        mPhone = (TextView) findViewById(R.id.DETAILS_phone);
        mCity = (TextView) findViewById(R.id.DETAILS_city);
        mEmail = (TextView) findViewById(R.id.DETAILS_email);


        // Data population
        mName.setText(mProjects.get(Projects.Field.NAME));
        mPhone.setText(mProjects.get(Projects.Field.PHONE));
        mCity.setText(mProjects.get(Projects.Field.DISTRICT));
        mEmail.setText(mProjects.get(Projects.Field.CITY));


    }

}

Projects.java 项目.java

package com.tutsplus.code.sharedelementtransition;
public class Projects {

    // I am going to define here the data, public static and constant,
    // so that every class in the project will be able to read it.
    // In a sense, we just mimic the standard behaviour of a database.
    public static final Projects[] PROJECTS = new Projects[] {
        new Projects("Mir Project1", R.drawable.a, "+01 123456789", "Trivandrum", "East Fort"),
        new Projects("Mir Project2", R.drawable.b, "+01 987654321", "Pathanamthitta", "Variyapuram"),
        new Projects("Mir Project3", R.drawable.c, "+01 123456789", "Kottayam", "Pala"),
        new Projects("Mir Project4", R.drawable.d, "+01 987654321", "Kollam", "Anchal"),
        new Projects("Mir Project5", R.drawable.e, "+01 11235813", "Ernakulam", "Kadavanthra"),
        new Projects("Mir Project6", R.drawable.a, "+01 123456789", "Kannur", "Onjiyam"),
        new Projects("Mir Project7", R.drawable.b, "+01 11235813", "Alapuzha", "Chengannur"),
        new Projects("Mir Project8", R.drawable.c, "+01 987654321", "Idukki", "Peerumedu"),
    };

    // The fields associated to the person
    private final String mProjectName;
    private final String mProjectPhone;
    private final String mProjectDistrict;
    private final String mProjectCity;
    private static int mImage;

    Projects(String name, int image, String phone, String email, String city) {
        mProjectName = name; mImage = image; mProjectPhone = phone; mProjectDistrict = email; mProjectCity = city;
    }

    // This method allows to get the item associated to a particular id,
    // uniquely generated by the method getId defined below
    public static Projects getItem(int id) {
        for (Projects item : PROJECTS) {
            if (item.getId() == id) {
                return item;
            }
        }
        return null;
    }

    // since mName and mPhone combined are surely unique,
    // we don't need to add another id field
    public int getId() {
        return mProjectName.hashCode() + mProjectPhone.hashCode();
    }

    public static enum Field {
        NAME, PHONE, DISTRICT, CITY, IMAGE
    }
    public String get(Field f) {
        switch (f) {
            case PHONE: return mProjectPhone;
            case DISTRICT: return mProjectDistrict;
            case CITY: return mProjectCity;
            case NAME: default: return mProjectName;
        }
    }
    public int geti(Field f) {
        switch (f) {
            case IMAGE:

        } return mImage;
    }}

DataManager.java 数据管理器

package com.tutsplus.code.sharedelementtransition;

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

public class DataManager extends RecyclerView.Adapter<DataManager.RecyclerViewHolder> {

    public static class RecyclerViewHolder extends RecyclerView.ViewHolder {

        TextView mProjectName, mProjectCity, mProjectDistrict;
        ImageView mImage;

        RecyclerViewHolder(View itemView) {
            super(itemView);
            mProjectName = (TextView) itemView.findViewById(R.id.PROJECT_name);
            mProjectCity = (TextView) itemView.findViewById(R.id.PROJECT_city);
            mProjectDistrict = (TextView) itemView.findViewById(R.id.PROJECT_district);
            mImage = (ImageView) itemView.findViewById(R.id.CONTACT_circle);
        }
    }

    @Override
    public RecyclerViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.contact_item, viewGroup, false);
        return new RecyclerViewHolder(v);
    }

    @Override
    public void onBindViewHolder(RecyclerViewHolder viewHolder, int i) {
        // get the single element from the main array
        final Projects projects = Projects.PROJECTS[i];
        // Set the values
        viewHolder.mProjectName.setText(projects.get(Projects.Field.NAME));
        viewHolder.mProjectCity.setText(projects.get(Projects.Field.CITY));
        viewHolder.mProjectDistrict.setText(projects.get(Projects.Field.DISTRICT));
        viewHolder.mImage.setImageResource(projects.geti(Projects.Field.IMAGE));

    }





    @Override
    public int getItemCount() {

        return Projects.PROJECTS.length;
    }
}

Here: 这里:

private static int mImage;

mImage is static which is associated with a class(Projects), not objects of that class. mImagestatic ,它与一个类(项目)关联,而不是该类的对象。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM