2015-11-07 85 views
0

我已经创建了一个包含RecyclerView的MainActivity。然后点击它将进入detailActivity页面。我已经在类Projects中创建了一个textviews和一个图像值的数组。这里每个文本视图根据Recyclerview的位置正常工作。但。这里我的问题是在回收站视图中的所有图像加载相同的图像。在Recycler视图中的Imageview在每个位置加载相同的图像

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

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

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

回答

1

这里:

private static int mImage; 

mImagestatic其与一个类(项目),而不是类的对象相关联。

+0

谢谢。它工作 –

+0

@RubinNellikunnathu,如果“ρяσѕρєяK”的答案有帮助,我建议将其标记为答案。 – MikeL

+0

是的。我尝试着 。这表明你必须等待3分钟来标记答案。 –