0

我有一个最近几天的问题。我基本上在 TabActivity、Fragment A、Fragment B 和 Fragment C 中有三个 Fragment。所有三个 Fragment 都包含单个 Fragment 中大约 14 个 CardViews 的 CardView 列表。这三个 Fragment 共享相同的布局,具有相同的 cardview 和相同的 id。每个 CardView 中有一个按钮,我想在单击该按钮时启动不同的活动。但我不能这样做,因为按钮的 id 是相同的,我想在从不同的片段单击该按钮时开始活动。我为此使用 RecyclerView。这意味着我在一个片段中有 14 个按钮,并且有三个片段。

4

2 回答 2

1

在您的活动中实现点击侦听器。在每个按钮上单击以编程方式执行您想要在布局中进行的任何更改..

下面的例子

public void onClick(View v)
{
    switch(v.getId())
    {
        case R.id.button1:
            // Do something 
            break;
        case R.id.button2:
            // Do something
            break;
        case R.id.button3:
            // Do something
    }
}
于 2016-07-03T10:41:34.667 回答
0

如果按钮在recyclerView 中,你可以在XML 中设置该按钮的点击监听器,它会在你的Activity 中被调用。现在您的 recyclerView 适配器,为您的按钮设置一个标签,该标签将作为单元格的位置。

holder.imageButton.setTag(position);

现在,在您的主要活动中,创建一个名为

int currentSelectedTab = 0;

然后在您的 TabChange 侦听器上执行此操作。;

 mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            selectedTab = position;
        }

        @Override
        public void onPageSelected(int position) {

        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

现在您将始终拥有当前选定的 tabPosition。

在您的活动中的 clicklistener 中执行此操作::

  public void myOnClick(View v) {

if(current selectedTab == 1)
{

if(v.getId === R.id.btn1)
{

// it means btn of Fragment 1 is clicked
// same goes for other button clicks
// and for the index of button
// v.getTag() it will you which cell's button was clicked

 }

在您的 cardView xml 中:

 <ImageButton
    android:id="@+id/chapter_description"
    android:layout_width="36dp"
    android:onClick="myOnClick"
    android:layout_height="36dp"
    android:layout_alignParentBottom="true"
    android:layout_alignParentEnd="true"
    android:layout_alignParentRight="true"
    android:src="@drawable/description"
    android:background="@drawable/ripple_effect"/>
于 2016-07-03T11:10:00.417 回答