2013-05-14 10 views
7

Nếu nó giúp, những gì tôi muốn là tương tự như những gì được thực hiện trong này google tutorialgiao dịch của các mảnh vỡ trong kết quả android trong màn hình trống

Nhưng có một đoạn được tạo ra trước khi chuyển đổi. Nếu tôi làm điều đó, quá trình chuyển đổi sẽ hoạt động tốt; nhưng tôi không thể sử dụng phương pháp này

=====

Nhằm API 7+ Tôi chỉ cố gắng để có một Fragment có thể nhìn thấy trong toàn bộ màn hình và sử dụng một nút (nút rút ra, với một onTouch event) sau đó thay thế cho một đoạn thứ hai và ngược lại.

Nhưng tôi có màn hình trống khi tôi thay thế đoạn đầu tiên bằng đoạn thứ hai hoặc nếu tôi sử dụng fragmentTransaction.show và fragmentTransaction.hide; Tôi có thể chuyển đổi hai lần trước khi tôi nhận được màn hình trống. Tôi không muốn có trên backstack.

tôi đang tạo ra các mảnh vỡ trong onCreate MainActivity của:

DiceTable diceTable = new DiceTable(); 
Logger logger = new Logger(); 
fragmentTransaction.add(diceTable, DICETABLE_TAG); 
fragmentTransaction.add(logger, LOGGER_TAG); 
fragmentTransaction.add(R.id.fragment_container, logger); 
fragmentTransaction.add(R.id.fragment_container, diceTable); 

Sau đó, trên một phương pháp (gọi từ các mảnh vỡ) Tôi làm công tắc:

Logger logger = (Logger)fragmentManager.findFragmentByTag(LOGGER_TAG); 
    DiceTable diceTable = (DiceTable)fragmentManager.findFragmentByTag(DICETABLE_TAG); 

    if (diceTable.isVisible()) { 
     fragmentTransaction.replace(R.id.fragment_container, logger); 

     fragmentTransaction.commit(); 
     fragmentTransaction.hide(diceTable); 
     fragmentTransaction.show(logger); 
    } 
    else if (logger.isVisible()) { 
     fragmentTransaction.replace(R.id.fragment_container, diceTable); 

     fragmentTransaction.commit(); 
     fragmentTransaction.hide(logger); 
     fragmentTransaction.show(diceTable); 
    } 

Đây không phải là làm thế nào tôi nên làm điều này ?

màn hình trống khi thay thế những mảnh

Trả lời

6

Cố gắng khởi mảnh theo cách đó:

private void initFragments() { 
    mDiceTable = new DiceTable(); 
    mLogger = new Logger(); 
    isDiceTableVisible = true; 

    FragmentManager fm = getSupportFragmentManager(); 
    FragmentTransaction ft = fm.beginTransaction(); 
    ft.add(R.id.fragment_container, mDiceTable); 
    ft.add(R.id.fragment_container, mLogger); 
    ft.hide(mLogger); 
    ft.commit(); 
} 

Và sau đó lật giữa họ theo cách đó:

private void flipFragments() { 
     FragmentManager fm = getSupportFragmentManager(); 
     FragmentTransaction ft = fm.beginTransaction(); 
     if (isDiceTableVisible) { 
      ft.hide(mDiceTable); 
      ft.show(mLogger); 
     } else { 
      ft.hide(mLogger); 
      ft.show(mDiceTable); 
     } 
     ft.commit(); 
     isDiceTableVisible = !isDiceTableVisible; 
    } 
1

Bạn đang kết hợp hai phương pháp khác nhau đến việc thay đổi Fragment được hiển thị:

  • Calling replace() để thay thế các nội dung của container với một Fragment khác nhau
  • Calling hide() để xóa Phân đoạn, sau đó gọi show() để hiển thị Phân đoạn khác.

Chọn một phương pháp và kết hợp với nó. Hướng dẫn Xây dựng giao diện người dùng linh hoạt chỉ sử dụng phương thức replace(), vì vậy tôi sẽ bắt đầu bằng cách cố gắng xóa tất cả các cuộc gọi của bạn thành show()hide().

Đồng thời xem Android Fragments: When to use hide/show or add/remove/replace? để có bản tóm tắt nhanh về thời điểm có thể có ích khi sử dụng ẩn/hiển thị thay vì thay thế.