Как начать новое намерение с помощью адаптера? - PullRequest
0 голосов
/ 02 сентября 2018

CategoriesListScreen.java

public class CategoriesListScreen extends AppCompatActivity
{

private static final String TAG = "CategoriesListScreen";

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

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

    getImages();
}

private void getImages(){
    Log.d(TAG, "initImageBitmaps: preparing bitmaps.");

    mImageUrls.add("https://c1.staticflickr.com/5/4636/25316407448_de5fbf183d_o.jpg");
    mNames.add("Havasu Falls");

    mImageUrls.add("https://i.redd.it/tpsnoz5bzo501.jpg");
    mNames.add("Trondheim");

    mImageUrls.add("https://i.redd.it/qn7f9oqu7o501.jpg");
    mNames.add("Portugal");

    mImageUrls.add("https://i.redd.it/j6myfqglup501.jpg");
    mNames.add("Rocky Mountain National Park");


    mImageUrls.add("https://i.redd.it/0h2gm1ix6p501.jpg");
    mNames.add("Mahahual");

    mImageUrls.add("https://i.redd.it/k98uzl68eh501.jpg");
    mNames.add("Frozen Lake");


    mImageUrls.add("https://i.redd.it/glin0nwndo501.jpg");
    mNames.add("White Sands Desert");

    mImageUrls.add("https://i.redd.it/obx4zydshg601.jpg");
    mNames.add("Austrailia");

    mImageUrls.add("https://i.imgur.com/ZcLLrkY.jpg");
    mNames.add("Washington");

    initRecyclerView();

}

private void initRecyclerView(){
    Log.d(TAG, "initRecyclerView: init recyclerview");

    LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
    RecyclerView recyclerView = findViewById(R.id.recyclerView);
    recyclerView.setLayoutManager(layoutManager);
    MyAdapter adapter = new MyAdapter(this, mNames, mImageUrls);
    recyclerView.setAdapter(adapter);
}

У меня есть адаптер для RecyclerView:

MyAdapter.java

 public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>
{
private ArrayList<String> mNames = new ArrayList<>();
private ArrayList<String> mImageUrl = new ArrayList<>();
private Context mContext;

public MyAdapter(Context mContext, ArrayList<String> names, ArrayList<String> mImageUrl) {
    this.mNames = names;
    this.mImageUrl = mImageUrl;
    this.mContext = mContext;
}

@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
{
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_listitem,parent,false);
    return new MyViewHolder(view);
}

@Override
   public void onBindViewHolder(@NonNull MyViewHolder holder, int position)
{
   //as the user clicks on different images activity correspond to that image should start.

    Glide.with(mContext)
            .asBitmap()
            .load(mImageUrl.get(position))
            .into(holder.); //i am confused what to write here..

    holder.onBind(position);

}


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

 public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        public MyViewHolder(View itemView)
        {
            super(itemView);
            CircleImageView image;
            TextView textView;

            image = (CircleImageView) itemView.findViewById(R.id.image_view);
            textView = (TextView) itemView.findViewById(R.id.name);
            image.setOnClickListener(this);
        }
        @Override
        public void onClick(View v) {

            switch(getAdapterPosition()){
                case 0:
                    // start activity 0
                    Intent intent = new Intent(mContext, MainActivity.class);
                    mContext.startActivity(intent);
                    break;
                case 1:
                    // start activity 1
                    Intent intent2 = new Intent(mContext, CarsActivity.class);
                    mContext.startActivity(intent2);
                    break;
            }
        }
    }
}

Я хочу настроить горизонтальный просмотр рециркулятора, и мне нужно начать новое задание Intent, соответствующее изображению. Например, если пользователь нажимает на первое изображение, его следует перенаправить на first.class, если пользователь нажимает на второе изображение, его следует перенаправить на second.class и т. Д. Я очень смущен. Я не могу понять, что писать внутри onBindViewHolder. Любая помощь будет оценена! :)

layout_listitem.xml

<android.support.v7.widget.CardView
    android:layout_width="120dp"
    android:layout_height="120dp"
    app:cardCornerRadius="4dp"
    app:cardMaxElevation="2dp"
    app:cardElevation="1dp"
    android:layout_centerInParent="true">


    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">


        <de.hdodenhof.circleimageview.CircleImageView
            android:layout_width="90dp"
            android:layout_height="90dp"
            android:scaleType="centerCrop"
            android:layout_centerHorizontal="true"
            android:id="@+id/image_view"
            android:src="@drawable/ic_launcher_background"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="20dp"
            android:text="Canada"
            android:layout_below="@+id/image_view"
            android:id="@+id/name"
            android:layout_centerHorizontal="true"
            android:gravity="center"
            android:layout_marginTop="5dp"
            android:textColor="#000"
            android:layout_marginBottom="5dp"
            android:autoSizeTextType="uniform"
            android:autoSizeMinTextSize="8sp"
            android:autoSizeMaxTextSize="15sp"/>

    </RelativeLayout>

</android.support.v7.widget.CardView>

</RelativeLayout>

Ответы [ 2 ]

0 голосов
/ 02 сентября 2018

onBindViewHolder имеет позицию элемента в качестве второго параметра, для этого решения вам, очевидно, нужно всегда знать, что позиция каждого отдельного объекта для каждой позиции в списке всегда одинакова

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) 
{
    ..
    switch(position) 
    {
        case 0:
            holder.imageView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent = new Intent(context, FirstClass.class);
                    context.startActivity(intent);
                }
            });
        break;
        case 1:
            holder.imageView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent = new Intent(context, SecondClass.class);
                    context.startActivity(intent);
                }
            });
        break
    }
}
0 голосов
/ 02 сентября 2018
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position)
{
   holder.onBind(mImageUrl.get(position), mNames.get(position));
}



public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        CircleImageView imageView; // <-- move image here
        TextView textView;
        public MyViewHolder(View itemView)
        {
            super(itemView);


            imageView = (CircleImageView) itemView.findViewById(R.id.image_view);
            textView = (TextView) itemView.findViewById(R.id.name);

            imageView.setOnClickListener(this);// <-- only this line is added to constructor
        }


        @Override
        public void onClick(View v) {//here ViewHolder implements OnClickListener

            final Context ctx = v.getContext();
            Intent intent;

            switch(getAdapterPosition){                
                case 0:                  
                   intent = new Intent(ctx, FirstActivity.class);
                   ctx.startActivity(intent);
                break;
                case 1:                  
                  intent = new Intent(ctx, SecondActivity.class);
                  ctx.startActivity(intent);
                break
            }
        }
        void onBind(String url, String name){ // call this method from onBindViewHolder

            textView.setText(name);

            Glide.with(imageView.getContext())
                 .asBitmap()
                 .load(url)
                 .into(imageView); 
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...