如何在TabActivity

时间:2016-07-03 10:18:42

标签: android android-fragments android-viewpager android-recyclerview cardview

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

2 个答案:

答案 0 :(得分: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
    }
}

答案 1 :(得分:0)

如果该按钮位于recyclerView中,您可以在XML中设置该按钮的单击侦听器,该侦听器将在您的“活动”中调用。现在您的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。

在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"/>