簡體   English   中英

從包含卡片的Recyclerview中打開新活動

[英]Open new activity from Recyclerview containing cards

有一個看似簡單的任務-

使用回收站視圖顯示項目列表,每個項目應為卡片視圖。單擊任何項​​目時,應打開一個新屏幕,其中將顯示該項目的詳細信息。

我已經見過關於同一主題的各種問題, 我將為我所做的嘗試提供一些幫助,而不是將我重定向到那里,因為我很新,並且無法僅通過查看這些答案就無法確切理解如何實現。試圖嚴格按照教程進行操作,但是顯然無法復制結果。

MainActivity.java

. package com.example.hardikvats.recylerviewdemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    private String[] phones={"MotoX","Nokia Asha","Lumia 710","Iphone 7s"};
    private String[] OperatingSytem={"Android","Symbian","Windows","Ios"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        RecyclerView recyclerView= (RecyclerView) findViewById(R.id.recyclerView);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        MyAdapter adapter=new MyAdapter(this,phones);
        recyclerView.setAdapter(adapter);

    }


    }

MyAdapter.java

import android.content.Context;
import android.content.Intent;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

/**
 * Created by Hardik Vats on 20-Jan-17.
 */

public class MyAdapter extends RecyclerView.Adapter<MyHolder> {
    Context c;
    String[] phones;
    String[] OperatingSystem;
    //CONSTRUCTOR
    public MyAdapter(Context c, String[] PhoneModel){
        this.c=c;
        this.phones=PhoneModel;
        //this.OperatingSystem=OperatingSystem;
    }
    @Override
    public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        //INFLATING FROM XML TO JAVA VIEW
        View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.model,null);

        MyHolder holder=new MyHolder(v);
        return holder;
    }

    @Override
    public void onBindViewHolder(MyHolder holder, int position) {
holder.PhoneModel.setText(phones[position]);
holder.setItemClickListner(new ItemClickListner() {
    @Override
    public void onItemClick(View v, int position) {
        Intent i=new Intent(c,DetailActivity.class);
        i.putExtra("OS name",OperatingSystem[position]);
    }
});
    }

    @Override
    public int getItemCount() {
        return phones.length;
    }

}

MyHolder.java

   import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.TextView;

/**
 * Created by Hardik Vats on 20-Jan-17.
 */

public class MyHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
    TextView PhoneModel;
     ItemClickListner icl;
    public MyHolder(View itemView) {
        super(itemView);
        PhoneModel=(TextView) itemView.findViewById(R.id.MobilePhone);
itemView.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
this.icl.onItemClick(v,getLayoutPosition());
    }
public void setItemClickListner(ItemClickListner itemClickListner){
        this.icl=itemClickListner;
    }
}

DetailActivity.java

     import android.content.Intent;

    import android.os.Bundle;

    import android.support.v7.app.AppCompatActivity;

    import android.widget.TextView;
    public class DetailActivity extends AppCompatActivity {
        TextView OperatingSystem;
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_detail2);
            Intent i=getIntent();
            final String OperatingSystem =i.getExtras().getString("Operating System");


        }
    }

ItemClickListner.java(接口)

`import android.view.View;

    /**
     * Created by Hardik Vats on 20-Jan-17.
     */

    public interface ItemClickListner {
        void onItemClick(View v, int position);
    }`

目的是單擊電話陣列中的每個列表項,並獲得一個在新文本字段的新活動中列出操作系統的活動。

在i.putExtra(“ OS NAME ....之后,添加此行

c.startActivity(c,DetailActivity.class);

如您所做的,為了使更改很小,請嘗試以下操作:

holder.PhoneModel.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent i=new Intent(c,DetailActivity.class);
        i.putExtra("OS name",OperatingSystem[holder.getAdapterPosition()]);
    }
});

持有人將始終保持您的位置。

//set on item click listener like this 

mRecyclerView.addOnItemTouchListener(new RecyclerItemClickListener(this, new RecyclerItemClickListener.OnItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {
                Toast.makeText(MainActivity.this, "Card at " + position + " is clicked", Toast.LENGTH_SHORT).show();

// here you can start your detail Activity
 Intent i=new Intent(c,DetailActivity.class);
        i.putExtra("OS name",OperatingSystem[position]);
c.startActivity(i);


            }
        }));

// here is the on item click listener class 

public class RecyclerItemClickListener  implements RecyclerView.OnItemTouchListener {
    private OnItemClickListener mListener;
    GestureDetector mGestureDetector;


    public interface OnItemClickListener{
        public void onItemClick(View view, int position);
    }


    public RecyclerItemClickListener(Context context, OnItemClickListener listener) {
        mListener = listener;
        mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
            @Override public boolean onSingleTapUp(MotionEvent e) {
                return true;
            }
        });
    }

    @Override
    public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
        View childView = rv.findChildViewUnder(e.getX(),e.getY());
        if(childView != null && mListener != null && mGestureDetector.onTouchEvent(e)){
            mListener.onItemClick(childView, rv.getChildAdapterPosition(childView));
            return true;
        }
        return false;
    }

    @Override
    public void onTouchEvent(RecyclerView rv, MotionEvent e) {

    }

    @Override`enter code here`
    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

    }

暫無
暫無

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

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