2

我已經從Android Training Site實施Android教程,並且一切工作到目前爲止。在片段上輸入EditText,並填寫所有其他片段

Fragment的內部,我添加了一個EditText字段,用戶可以在其中輸入一個簡單的文本字符串。

我想要實現的是:如果用戶輸入了一些內容,然後向左或向右滑動,則輸入也應該「複製」新片段。

在培訓中,我有一個ScreenSlidePageFragment.java類和一個ScreenSlideActivity.java類。

我實現一個接口在ScreenSlidePageFragment,as mentioned here

Communicator mCallback; 

public interface Communicator { 
    void sendData(String inpString); 
} 

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
    try { 
     mCallback = (Communicator) context; 
    } catch (ClassCastException e) { 
     throw new ClassCastException(context.toString() + "must Implement OnEditChangedListener"); 
    } 
} 

但最後,我好不容易纔得到它的ScreenSlideActivity。我如何更新指定的片段? 在ScreenSlideActivity中,我試圖將它發送回新的片段。

@Override 
public void sendData(String inpString) { 
     WHATFRAGMENT.changeData(inpString); 
} 

但怎樣訪問另一個(WHATFRAGMENT),這是在ScreenSlidePagerAdapter創建:

@Override 
public Fragment getItem(int position) { 
    return NewReservationSlidePageFragment.create(position); 
} 

我需要創建一個完整的片段,並覆蓋新位置?還是有必要解決該活動?以某種方式可以使用FragmentTransaction嗎?

什麼是最簡單的解決方案?

回答

2

您可以在您的接口你這樣的interfacepublic void setUserVisibleHint(boolean isVisibleToUser)

再添加一個方法實現,

public interface Communicator { 
    void sendData(String inpString); 
    String getData(); 
} 

而且在你活動創建一個字符串變量在全球範圍內存儲的值。

,並指定數據即將形式sendData

@Override 
public void sendData(String inpString) { 
    this.value = inpString; 
     //WHATFRAGMENT.changeData(inpString); 
} 

,並在活動實施getData

@Override 
public void getData() { 
    return this.value; 
} 

在片段添加setUserVisibleHint

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    if(isVisibleToUser) { 
     mCallback.sendData("[string from your edit text]"); 
    } else { 
     String value = mCallback.getData(); 
    } 
} 

現在你可以看到你edi的數據在一個片段中可以顯示其他可見片段。

+0

'getData()'方法不是必須的。每個'Fragment'將在從'FragmentManager'中刪除時調用'sendData()',可能在'onPause()'中。 「Activity」可能實現了接口並將數據轉發到下一個「Fragment」。 –

+0

如果您使用視圖尋呼機** onPause **並且** OnResume **在當時不會接聽電話,我們應該只使用** setUserVisibleHint **方法。 –

+0

@MuthukrishnanRajendran非常感謝,現在它工作。以前不知道'setUserVisibleHint()'。 但是在某一時刻,我得到了一個可能會讓用戶感到困惑的行爲:如果文本字段在其他片段之一上發生了更改,並且被刷回,則數據不會被覆蓋。它仍然是「舊」字符串,即使我嘗試清除它之前:'myEditTxt.getText()。clear()' – a2hur