如何使用FAB在选项之间循环?

时间:2018-06-21 20:26:37

标签: java android fragment

我有一个片段,其中我想在中央有一个主ImageButton,在两侧各有2个FAB,分别用于上一个或下一个Image。我已经用XML进行了设置,但是还不太清楚如何使其完全适合Java。

public class NewCard extends Fragment {

public static int cardNumber;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.fragment_new_card, container, false);
    final ImageButton button = view.findViewById(R.id.card1);

    FloatingActionButton previous = view.findViewById(R.id.previous);
    FloatingActionButton next = view.findViewById(R.id.next);

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            cardNumber = 1;
            FinalSubmit fragment = new FinalSubmit();

            getContext().getSharedPreferences("pref", 0).edit().putInt("int", cardNumber).apply();

            address fragment4 = new address();
            FragmentTransaction ft4 = getFragmentManager().beginTransaction();
            ft4.replace(R.id.frameLayout, fragment4, "FragmentName");
            ft4.commit();


        }});

    return view;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);



}
}

1 个答案:

答案 0 :(得分:0)

那么,您想要的是背景中的一个按钮图像,以及两个FAB通过一系列图片/循环来更改背景中的按钮图像的图像?

我是从正常活动中得到的,不是零碎的,但我认为应该是相同的。

ImageButton button;
int nImages=5; //whatever number of images youre cycle goes through
int currentImageId=3; //for example   

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

button= (ImageButton)findViewById(R.id.imgButton);
button.setOnClickListener(imgButtonHandler);
changeBackground(currentImageId);

fab1= (ImageButton)findViewById(R.id.fab1);
fab1.setOnClickListener(imgUp);

fab2= (ImageButton)findViewById(R.id.fab2);
fab2.setOnClickListener(imgDown);
}

//so now we are cycling through 1 to 5 

View.OnClickListener imgUp = new View.OnClickListener() {

public void onClick(View v) {
    if (currentImageId==5)  //if we hit 5, and user is still pressing same fab we set 
// it back to the start, 1
{
currentImageId=1;
changeBackground(currentImageId);
return;
}
currentImageId+=1     //Otherwise, just add 1 to the counter
changeBackground(currentImageId);
}
};

View.OnClickListener imgDown = new View.OnClickListener() {

public void onClick(View v) {
if (currentImageId==1) //if we hit 1, and user is still pressing same fab we set 
// it back to the top, 5
{
currentImageId=5;
changeBackground(currentImageId);
return;
}
currentImageId-=1 //Otherwise, just subtract 1 to the counter
changeBackground(currentImageId);

}
};

public void changeBackground(int currentImageId) {
if (currentImageId==1) {
button.setBackgroundResource(image1 path or drawable);

}
if (currentImageId==2) {
button.setBackgroundResource(image2 path or drawable);

}
// and so on and so on... just add all the files 
}

如果图片太多,可能不干净,可能会有更好的选择,但是我认为这很简单,这就是我会做的,而不是专家或其他任何人,只是想帮助您!