Android - 在 RecyclerView 中单击的项目上打开新活动 [重复]

Posted

技术标签:

【中文标题】Android - 在 RecyclerView 中单击的项目上打开新活动 [重复]【英文标题】:Android - Open new activity on item clicked in RecyclerView [duplicate] 【发布时间】:2018-02-04 22:13:37 【问题描述】:

我正在为新手创建一个简单的应用程序,但我被困在主要部分。我创建了 RecyclerView 列表。我想知道如何通过单击 ListView 中的第一项来打开一个新的 Activity(参见屏幕截图)。

这是我的 MainActivity 文件:

public class MainActivity extends AppCompatActivity 

    Toolbar toolbar;
    DrawerLayout drawerLayout;
    NavigationView navigationView;

    private ArrayList<String> countries;

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

    private void initViews() 
        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.card_recycler_view);
        recyclerView.setHasFixedSize(true);
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
        recyclerView.setLayoutManager(layoutManager);
        countries = new ArrayList<>();
        countries.add("Computer");
        countries.add("RAM");
        countries.add("ROM");
        countries.add("MotherBoard");
        countries.add("Printer");
        countries.add("CPU");
        countries.add("Pendrive");
        countries.add("Keyboard & Mouse");
        RecyclerView.Adapter adapter = new DataAdapter(countries);
        recyclerView.setAdapter(adapter);

        recyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() 
            GestureDetector gestureDetector = new GestureDetector(getApplicationContext(),
                new GestureDetector.SimpleOnGestureListener() 
                    @Override
                    public boolean onSingleTapUp(MotionEvent e) 
                        return true;
                    
                );

            @Override
            public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) 
                View child = rv.findChildViewUnder(e.getX(), e.getY());
                if (child != null && gestureDetector.onTouchEvent(e)) 
                    int position = rv.getChildAdapterPosition(child);
                    Toast.makeText(getApplicationContext(), countries.get(position),
                        Toast.LENGTH_SHORT).show();
                
                return false;
            

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

            @Override
            public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) 
            
        );
    

数据适配器:

public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> 
    private ArrayList<String> countries;

    public DataAdapter(ArrayList<String> countries) 
        this.countries = countries;
    

    @Override
    public DataAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) 
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_row, viewGroup, false);
        return new ViewHolder(view);
    

    @Override
    public void onBindViewHolder(DataAdapter.ViewHolder viewHolder, int i) 
        viewHolder.tv_country.setText(countries.get(i));
    

    @Override
    public int getItemCount() 
        return countries.size();
    

    public class ViewHolder extends RecyclerView.ViewHolder
        private TextView tv_country;
        public ViewHolder(View view) 
            super(view);
            tv_country = (TextView)view.findViewById(R.id.tv_country);
        
    

【问题讨论】:

在此处查看已接受的答案。 -> 将 ClickListener 添加到您的 ViewHolder。 ***.com/questions/24885223/… 【参考方案1】:

你应该使用 onItemClickListener 或 OnClickListener

 recyclerView.setOnClickListener(new View.OnClickListener() 
 ...
 

【讨论】:

你能详细告诉我吗? 而不是使用这个recyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() 你应该使用我在答案中说的方法。另一种可能性是向适配器添加一个 onclick 方法,用于当用户单击每个文本视图时 谢谢老哥问题解决了【参考方案2】:

在 onBindViewHolder 函数中,在项目上添加 onClickListner。

@Override
public void onBindViewHolder(DataAdapter.ViewHolder viewHolder, int i) 

    viewHolder.tv_country.setText(countries.get(i));
    viewHolder.tv_country.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View view) 

        
    );


在这个例子中,我在 tv_country 上添加了 onCLickListner。如果您需要进一步的帮助,请在 cmets 中问我。

【讨论】:

永远欢迎!

以上是关于Android - 在 RecyclerView 中单击的项目上打开新活动 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

android之recyclerview的基本使用

android: ScrollView 内的 RecyclerView

Android:在 Recyclerview 中更改图像旋转

RecyclerView:错误的滚动效果(Android)

Android Studio(Kotlin)之RecyclerView

Android RecyclerView的基本使用