卡片视图 点击卡片 跳转到新活动页面

22

我是 Android 编程的新手,正在使用卡片布局。想知道如何使它可点击?

android:clickable="true"
android:foreground="?android:attr/selectableItemBackground"

我在我的卡片小部件上有这个功能,然后我想知道在哪里放置可点击的操作?我想要能够单击该卡片,获取卡片的ID,然后显示一个新的意图活动。

这是我加载适配器的活动代码

setContentView(R.layout.activity_my);


    RecyclerView recList = (RecyclerView) findViewById(R.id.cardList);
    recList.setHasFixedSize(true);
    LinearLayoutManager llm = new LinearLayoutManager(this);
    llm.setOrientation(LinearLayoutManager.VERTICAL);
    recList.setLayoutManager(llm);

    ContactAdapter ca = new ContactAdapter(createList(30));

    recList.setAdapter(ca);

也许你可以从这里得到一些灵感 -> https://dev59.com/lGAf5IYBdhLWcg3wmzpL - Alfaplus
请查看此链接,了解有关RecyclerView上点击监听器的信息:https://stackoverflow.com/a/48643276/7319704 - Abhinav Gupta
6个回答

22
在您的 Adapter Java 文件中,在 "ViewHolder" 内部,您会找到:
public ContactViewHolder(final View v) {
    super(v);
}

请写出以下代码:

v.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        v.getContext().startActivity(new Intent(v.getContext(), YOUR_ACTIVITY_TO_START.class));
    }
});

11

如果你正确地使用了这个实现,你的代码应该像这样:

card - is the card view you instantiated to display on your ui


card.setOnClickListener(...);

在您实现的onClickListener中,您应该有以下内容:

@Override
public void onClick(Card c ,View v) {
    Intent intent = new Intent(MyActivity.this, NextActivity.class);
    startActivity(intent);
}

这基本上是你需要从卡片开始新活动的全部内容。


1
我不确定我是否正确地实现了它。我有一个Recycler View,里面我用CardView小部件填充它。每当我尝试做一个recList(Recycler列表的变量)并设置一个onClicklistener时,我似乎无法获得onClick(card C,view v),而只得到onClick(view v)。 - NexusOnly
这个答案未能解决上下文问题。请查看Mahdi的答案获取正确答案。你必须通过其中一个视图(例如卡片上的TextView)来获取上下文。 - seekingStillness

5

给cardView添加onClick事件就解决了:

     <android.support.v7.widget.CardView
            android:foreground="?android:attr/selectableItemBackground"
            android:clickable="true"
            android:id="@+id/bankcardId"
            android:layout_width="160dp"
            android:layout_height="190dp"
            android:layout_margin="10dp"
            android:onClick="P1_bay">

然后在您的Java函数中按以下方式调用:

    public void P1_bay(View view) {
    Toast.makeText(this, "You have clicked P1", Toast.LENGTH_LONG).show();
}

3
您可以按照以下方式使用viewHolder类
public ViewHolder(View itemLayoutView) {
        super(itemLayoutView);

       itemLayoutView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v)
            {
             //  perfoem your action here
            }
        });
    }

1

导入android.view.View包;

意图 intent = new Intent(view.getContext(), YourActivity.class); view.getContext().startActivity(intent);


1
你可以将View.OnClickListener()接口实现到你的类中,然后在onCreate()方法中编写findViewById(R.id.cardview).setOnClickListener(this)。然后你可以重写onClick()方法,并在用户点击卡片时执行你想要执行的操作。

代码看起来像这样:

public class MainActivity extends Activity implements View.OnClickListener()
{
     public void onCreate(Bundle savedInstanceState)
     {
       super.onCreate(savedInstanceState);
       // load the layout
       setContentView(R.layout.filters);
       // get the id of the CardView and attach an onClickListener to it
       findViewById(R.id.cardList).setOnClickListener(this)
     }
     @Override
     private void onClick(View view)
     {
        if(view.getId == R.id.cardList)
        {
         //Do something Like starting an activity
         Intent intent = new Intent(MyActivity.this, NextActivity.class);
         startActivity(intent);
        }
     }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接