【问题标题】:How to use same button with different functionality in different Fragments using same layout file in TabActivity如何在 TabActivity 中使用相同的布局文件在不同的 Fragment 中使用具有不同功能的相同按钮
【发布时间】:2016-11-05 06:06:11
【问题描述】:

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

【问题讨论】:

  • 好的,但是按钮点击监听器在哪里?
  • 如果你的项目很小,你可以把你的项目zip发给我,我会在你的项目中添加所需的代码
  • 我可以把我的项目寄给你吗?
  • 上传到 Dropbox 后在此处给我发送 Dropbox 链接
  • 这三个文件是我的整个项目。没有什么要分享的了。

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


【解决方案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
    }
}

【讨论】:

    【解决方案2】:

    如果按钮在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。

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

    【讨论】:

    • 嘿,你现在能帮帮我吗?我现在已经发布了我的代码。请。这将是一个很大的帮助。
    • 你说的那个按钮是id是chapter_description的那个?
    • 是的,这是一个按钮,我正在使用三个不同的片段。我希望他们做不同的事情。但是我用于三个片段的布局是相同的。
    猜你喜欢
    • 2018-03-03
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多