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