android fragment 跳到另一個fragment


一共有4個fragment,分別是contact(聯系人),friends(朋友),search(查找),more(更多)。使用的都是同一個布局,每個fragment中都有四個內部按鈕,可以切換到其他的3個fragment中。

現在只考慮在contact中,實現點4個(其實有效的是3個),切換到其他3個fragment中。

現在的情況是,點擊contactfragment中的按鈕,toast會響應,但是fragment不會跳轉。這是怎么回事,下面是兩個類的代碼。

這是contactfragment。

public class ContactFragment extends Fragment implements OnClickListener {
    MainActivity activity = (MainActivity) getActivity();
    View view = null;
    Button btn_inner_contact;
    Button btn_inner_friends;
    Button btn_inner_search;
    Button btn_inner_more;
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.frag_content, container, false);
        TextView textview_hint = (TextView) view
                .findViewById(R.id.textview_hint);
        textview_hint.setText("Contact");
        initComponent();
        return view;
    }
 
    private void initComponent() {
        btn_inner_contact = (Button) view
                .findViewById(R.id.button_inner_contact);
        btn_inner_friends = (Button) view
                .findViewById(R.id.button_inner_friends);
        btn_inner_search = (Button) view.findViewById(R.id.button_inner_search);
        btn_inner_more = (Button) view.findViewById(R.id.button_inner_more);
 
        btn_inner_contact.setOnClickListener(this);
        btn_inner_friends.setOnClickListener(this);
        btn_inner_search.setOnClickListener(this);
        btn_inner_more.setOnClickListener(this);
    }
 
    @Override
    public void onClick(View v) {
 
        FragmentManager fm = activity.getFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        switch (v.getId()) {
        case R.id.button_inner_contact:
            Toast.makeText(getActivity(), "點擊了內部contact按鈕", Toast.LENGTH_SHORT)
                    .show();
            if (activity.contactFragment == null) {
                activity.contactFragment = new ContactFragment();
            }
            ft.replace(R.id.framelayout_content, activity.contactFragment);
 
            break;
        case R.id.button_inner_friends:
                        Toast.makeText(getActivity(), "點擊了內部friends按鈕", Toast.LENGTH_SHORT)
            if (activity.friendsFragment == null) {
                activity.friendsFragment = new FriendsFragment();
            }
            ft.replace(R.id.framelayout_content, activity.friendsFragment);
            break;
        case R.id.button_inner_more:
            if (activity.moreFragment == null) {
                activity.moreFragment = new MoreFragment();
            }
            ft.replace(R.id.framelayout_content, activity.moreFragment);
            break;
        case R.id.button_inner_search:
            if (activity.searchFragment == null) {
                activity.searchFragment = new SearchFragment();
            }
            ft.replace(R.id.framelayout_content, activity.searchFragment);
            break;
        default:
            break;
 
        }
        ft.commit();
    }
 
}

這是mainactivity類,mainactivity中的那四個按鈕及其響應時間是fragment外部的四個按鈕,與內部的inner按鈕沒關系

public class MainActivity extends Activity implements OnClickListener {
    public ContactFragment contactFragment;
    public FriendsFragment friendsFragment;
    public MoreFragment moreFragment;
    public SearchFragment searchFragment;
    private Button btn_contact;
    private Button btn_friends;
    private Button btn_search;
    private Button btn_more;

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

    }

    private void initview() {
        contactFragment = new ContactFragment();
        FragmentManager fm = getFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        ft.add(R.id.framelayout_content, contactFragment);
        ft.commit();
    }

    private void initcomponet() {

        btn_contact = (Button) findViewById(R.id.button_contact);
        btn_friends = (Button) findViewById(R.id.button_friends);
        btn_more = (Button) findViewById(R.id.button_more);
        btn_search = (Button) findViewById(R.id.button_search);
        btn_contact.setOnClickListener(this);
        btn_friends.setOnClickListener(this);
        btn_more.setOnClickListener(this);
        btn_search.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        FragmentManager fm = getFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        switch (v.getId()) {
        case R.id.button_contact:
            if (contactFragment == null) {
                contactFragment = new ContactFragment();
            }
            ft.replace(R.id.framelayout_content, contactFragment);

            break;
        case R.id.button_friends:
            if (friendsFragment == null) {
                friendsFragment = new FriendsFragment();
            }
            ft.replace(R.id.framelayout_content, friendsFragment);

            break;
        case R.id.button_more:
            if (moreFragment == null) {
                moreFragment = new MoreFragment();
            }
            ft.replace(R.id.framelayout_content, moreFragment);

            break;
        case R.id.button_search:
            if (searchFragment == null) {
                searchFragment = new SearchFragment();
            }
            ft.replace(R.id.framelayout_content, searchFragment);
            break;

        default:
            break;
        }
        ft.commit();
    }

}
我試了一下,把MainActivity activity=(MainActivity)getActivity();這行代碼放到onclick方法了,就可以了!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM