我有一個主活動和幾個片段。在每個片段上,我有幾個TextView元素。我想從主活動中改變當前顯示的片段上的TextViews的字體大小。因此,我想使用Listener在currentFragment上保存TextView元素的列表。 但我不知道如何實現這樣的監聽器? 聽衆是否正確地做到這一點?Android的監聽器爲例來保持電流的TextView元件上片段
如果有另一種方式來做到這一點,我想知道。任何答案歡迎。謝謝。
我有一個主活動和幾個片段。在每個片段上,我有幾個TextView元素。我想從主活動中改變當前顯示的片段上的TextViews的字體大小。因此,我想使用Listener在currentFragment上保存TextView元素的列表。 但我不知道如何實現這樣的監聽器? 聽衆是否正確地做到這一點?Android的監聽器爲例來保持電流的TextView元件上片段
如果有另一種方式來做到這一點,我想知道。任何答案歡迎。謝謝。
我已經實現如下。它工作得很好,但我不知道它有多清晰的解決方案。
public class MainActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
//
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action buttons
switch(item.getItemId()) {
case R.id.smallFontSize:
FontSizeHelper.updateFontSize(Constants.fontSize1);
return true;
case R.id.mediumFontSize:
FontSizeHelper.updateFontSize(Constants.fontSize2);
return true;
case R.id.largeFontSize:
FontSizeHelper.updateFontSize(Constants.fontSize3);
return true;
case R.id.extraLargeFontSize:
FontSizeHelper.updateFontSize(Constants.fontSize4);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
public class FontSizeHelper {
public static List<View> viewElements = new ArrayList<>();
public static void initFontElements(){
viewElements = new ArrayList<>();
}
public static void addFontEelements(View view){
viewElements.add(view);
}
public static void updateFontSize(int fontSize){
for(View v : viewElements){
if(v instanceof TextView){
((TextView) v).setTextSize(fontSize);
}
}
}
}
public class FragmentA extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View rootView = inflater.inflate(R.layout.a_fragment, container, false);
//initialize empty list for View objects.
FontSizeHelper.initFontElements();
//add View object/TextViews into list
FontSizeHelper.addViewEelements(textView1);
FontSizeHelper.addViewEelements(textView2);
FontSizeHelper.addViewEelements(textView3);
//..etc
}}
如果我的問題是正確的,那麼您可以從主活動訪問當前片段的TextView
對象,並使用setTextSize()
方法。
您聲明TextViews的列表,並提供給textviews添加到列表中的方法。
而且您還可以提供信號的激活狀態的方法。這種方法將通過文本視圖列表逐個調用您需要的更改。
從您的主要活動中,你將調用fragment.changeListeningTextViews();
這正好在片段:
private ArrayList<TextView> listeningTextViews;
public void addListeningTextview(TextVew tv){
//Here check if the text view is already added not to add it twice.
listeningTextViews.add(tv);
}
public void changeListeningTextViews(){
for(TextView tv : listeningTextViews){
tv.setFont(...);
//What you want called on each TextVeiw
}
}
在onCreateView您添加文本視圖列表:
TextView textView1 = (TextView) rootView.findViewById(R.id.aview);
addListeningTestview(textView1);
TextView textView2 = (TextView) rootView.findViewById(R.id.anotherview);
addListeningTestview(textView2);
...
注:如果是倒過來的時候,你需要的主要活動要監聽來自片段的事件,解決方案將會有所不同,並且它將涉及由主活動實施的自定義偵聽器接口。
現在你說了,我可以從主要活動中訪問當前顯示片段的對象。但我現在已經實現了一個FontSizeHelper類來保存textView對象。像我這樣的方式很清楚。但是我認爲應該有更好的方式。 – Yakari
發佈一些代碼,以便我們更好地瞭解您的情況。 – Shanky