简体   繁体   中英

How to use onClickListener method in fragment?

In my project i use viewPager for show some fragments .
In one of fragments i want click on button.
I write below codes but when click on button not call onClickListener and not show Toast for me!

My codes in fragment :

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser){
        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                list_item = getActivity().findViewById(R.id.list_item);
                list_item.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        if (clickFlag) {
                            AuctionTodayListAdapter adapter = new AuctionTodayListAdapter(getActivity(), R.layout.list_item_auction_large_new, Constants.auction.getToday());
                            list.setAdapter(adapter);
                            clickFlag = false;
                            list_item.setImageResource(R.drawable.list_icon);
                            Toast.makeText(context, ""+clickFlag, Toast.LENGTH_SHORT).show();
                        } else {
                            AuctionTodayListAdapter adapter = new AuctionTodayListAdapter(getActivity(), R.layout.list_item_auction_normal_soon, Constants.auction.getToday());
                            list.setAdapter(adapter);
                            clickFlag = true;
                            list_item.setImageResource(R.drawable.list);
                            Toast.makeText(context, ""+clickFlag, Toast.LENGTH_SHORT).show();
                        }
                    }
                });
            }
        }, 50);
    }
}

How can i fix this issue?

Why are you overriding setUserVisibleHint to set up a click listener?


UPDATE: setUserVisibleHint has nothing to do with toolbar buttons ... that method is for you to call to let the system know the fragment is not visible. It's not normally called by the system, which is why your toast is never shown.

If the button you're trying to find is a toolbar item, you need to interact with it using the onCreateOptionsMenu and onOptionsItemSelected methods instead.


This is the sort of thing one does in onCreateView:

 @Override View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = // inflate view from layout resource list_item = getActivity().findViewById(R.id.list_item); // Get toolbar item list_item.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // Do you click stuff } } } 

Then, if you only want to interact with this button when this fragment is active, you can show and hide it in onStart() and onStop, respectively.

 @Override public void onStart() { super.onStart(); list_item.setVisibility(View.VISIBLE); } @Override public void onStop() { super.onStop(); list_item.setVisibility(View.GONE); } 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM