문제

I have a class where I include another layout on a button click. This included layout has some buttons and a code which executes on clicking these buttons. I have used a counter which indicates the number of times the button is clicked. First time clicking on the button includes the layout and the second time clicking removes the views and so on. Here's the code

public class Home extends Fragment implements OnClickListener {

    int c = 0;
    Button bmain, bnew, bolder;
    RelativeLayout r1;
    View rootView;
    Animation slidedown, slideup;

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

        rootView = inflater.inflate(R.layout.home, container, false);
         bmain = (Button) rootView.findViewById(R.id.btn2);
         bmain.setOnClickListener(this);


        return rootView;
    }

    @Override
    public void onClick(View arg0) {

        ViewGroup con = null;
        LayoutInflater layoutInflater = (LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
        FrameLayout flContainer = (FrameLayout)rootView.findViewById(R.id.flContainer);


        //Loading animation
        slidedown = AnimationUtils.loadAnimation(getActivity(), R.anim.slide_down);
        slideup = AnimationUtils.loadAnimation(getActivity(), R.anim.slide_up);

        //The counter indicates the number of clicks.  
        //Needs to be replaced for a better solution.
        //If it's even add view
        if(c%2==0)
        {


            //Adding layout here
            flContainer.addView(layoutInflater.inflate(R.layout.test1,con,false ));

            //Starting Animation
            flContainer.startAnimation(slidedown);



            //After adding layout we can find the Id of the included layout and proceed from there 
            bnew = (Button) rootView.findViewById(R.id.btntest);
            bnew.setOnClickListener(new OnClickListener()
            {
                @Override
                public void onClick(View arg0) {            
                    Toast.makeText(getActivity(), "You Clicked New", Toast.LENGTH_LONG).show();
                }

            });

            bolder = (Button) rootView.findViewById(R.id.btntest1);
            bolder.setOnClickListener(new OnClickListener()
            {

                @Override
                public void onClick(View arg0) {
                    Intent form = new Intent(getActivity(),FeedbackForm.class);
                    startActivity(form);

                }

            });

            c++;
        } //If ends here

        //If it's odd remove view
        else
        {


                flContainer.removeAllViews();
                flContainer.startAnimation(slideup);

                //flContainer.removeView(flContainer);
                //flContainer.removeView(layoutInflater.inflate(R.layout.test1, con, false));

                c++;
        }





        }       
}

The code at the end

                            flContainer.removeAllViews();
                flContainer.startAnimation(slideup);

removes the view but fails to process the animation. I have tried using removeView but in that case the buttonclicks in the if statement fail to execute the second time. What am I missing here? How can I achieve it?

도움이 되었습니까?

해결책

The answer is pretty simple. You have to remove the view after the animation is finished. This can be achieved pretty simple, first you have to set an animation listener for your animation and in the onAnimationEnd callback - which is called when the animation is finished - you remove the views.

EDIT:

Replace this:

flContainer.removeAllViews();
flContainer.startAnimation(slideup);

With this:

slideup.setAnimationListener(new Animation.AnimationListener() {
    @Override
    public void onAnimationStart(Animation animation) {

    }

    @Override
    public void onAnimationEnd(Animation animation) {
        flContainer.removeAllViews();
    }

    @Override
    public void onAnimationRepeat(Animation animation) {

    }
});
flContainer.startAnimation(slideup);

If there are any further problems let me know.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top