如何在 TabActivity 中使用相同的布局文件在不同的片段中使用具有不同功能的相同按钮

How to use same button with different functionality in different Fragments using same layout file in TabActivity

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

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

下面的例子

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
    }
}

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

holder.imageButton.setTag(position);

现在,在您的主 activity 中,创建一个名为

的整数变量
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。

然后在 Activity 的 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"/>