用于在Fragment上保存当前TextView元素的Android Listener示例

时间:2017-03-18 13:41:57

标签: android android-fragments listener

我有一个主要活动和几个碎片。在每个片段上,我有几个TextView元素。我想在主要活动的当前显示的片段中更改TextViews的字体大小。因此,我想使用监听器在currentFragment上保存TextView元素列表。 但我不知道如何实现这样的Listener? 听众是否有正确的方法呢?

如果有另一种方法可以达到这个目的,我想知道。欢迎任何答案。感谢。

3 个答案:

答案 0 :(得分:0)

如果我的问题正确,您只需从主要活动中访问当前片段的TextView对象,然后使用setTextSize()方法。

答案 1 :(得分:0)

您声明了一个TextView列表,并提供了一种将文本视图添加到列表中的方法。

并且您还提供了一种发出激活状态信号的方法。此方法将逐个调用您需要的更改的文本视图列表。

在您的主要活动中,您将调用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);
...

注意:如果您需要主活动来监听来自片段的事件,那么解决方案将会有所不同,并且它将涉及由主活动实现的自定义监听器接口。

答案 2 :(得分:0)

我已实施如下。它工作得很好但我不知道解决方案有多清楚。

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
}}