首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在RelativeLayout中删除动态创建的视图

如何在RelativeLayout中删除动态创建的视图
EN

Stack Overflow用户
提问于 2017-09-18 07:26:20
回答 1查看 74关注 0票数 0

动态创建布局后,我想根据PreferenceFragment中的切换开关位置显示/隐藏文本视图,但它不起作用:

public class MyFragment extends android.support.v4.app.Fragment {

    private TextView tv1;
    private TextView tv2;
    private TextView tv3;

    boolean diagramState;

    public MyFragment() {}

    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        return inflater.inflate(R.layout.my_fragment, container, false);
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        View v = getView();
        assert v != null;

        RelativeLayout relativelayout = v.findViewById(myFragmentlayout);

        RelativeLayout.LayoutParams rlp1 = new RelativeLayout.LayoutParams(GridLayout.LayoutParams.MATCH_PARENT, GridLayout.LayoutParams.WRAP_CONTENT);
        RelativeLayout.LayoutParams rlp2 = new RelativeLayout.LayoutParams(GridLayout.LayoutParams.WRAP_CONTENT, GridLayout.LayoutParams.WRAP_CONTENT);
        RelativeLayout.LayoutParams rlp3 = new RelativeLayout.LayoutParams(GridLayout.LayoutParams.WRAP_CONTENT, GridLayout.LayoutParams.WRAP_CONTENT);


        // add text views
        TextView tv1 = new TextView(getActivity());
        tv1.setText(getString(R.string.blue));
        tv1.setTextColor(Color.WHITE);

        TextView tv2 = new TextView(getActivity());
        tv2.setText(getString(R.string.green));
        tv2.setTextColor(Color.WHITE);

        TextView tv3 = new TextView(getActivity());
        tv3.setText(getString(R.string.orange));
        tv3.setTextColor(Color.WHITE);


        tv1.setId(View.generateViewId());
        tv2.setId(View.generateViewId());
        tv3.setId(View.generateViewId());

        rlp2.addRule(RelativeLayout.BELOW, tv1.getId());
        rlp3.addRule(RelativeLayout.BELOW, tv2.getId());

        tv1.setLayoutParams(rlp1);
        tv2.setLayoutParams(rlp2);
        tv3.setLayoutParams(rlp3);

        relativelayout.addView(tv1);
        relativelayout.addView(tv2);
        relativelayout.addView(tv3);

        super.onActivityCreated(savedInstanceState);
    }

    @Override
    public void onResume(){
        super.onResume();
        loadPreferences();
        displaySettings(getView());
    }

    private void loadPreferences(){
        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext());
        diagramState = sharedPreferences.getBoolean("pref_pref1", true);
    }

    public void displaySettings() {
        if (diagramState) {
            tv1.setVisibility(View.VISIBLE);
            tv2.setVisibility(View.VISIBLE);
            tv3.setVisibility(View.VISIBLE);
        } else {
            tv1.setVisibility(View.GONE);
            tv2.setVisibility(View.GONE);
            tv3.setVisibility(View.GONE);
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-19 00:01:16

您的错误不言而喻,只需在类中全局声明TextView变量即可:

public class MyFragment extends android.support.v4.Fragment {

    // Part of your class

    private TextView tv1;
    private TextView tv2;
    private TextView tv3;

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        //Part of your code

        // add text views
        tv1 = new TextView(getActivity());
        tv1.setText(getString(R.string.blue));
        tv1.setTextColor(Color.WHITE);

        tv2 = new TextView(getActivity());
        tv2.setText(getString(R.string.green));
        tv2.setTextColor(Color.WHITE);

        tv3 = new TextView(getActivity());
        tv3.setText(getString(R.string.orange));
        tv3.setTextColor(Color.WHITE);

        // Rest of your code
    }

    // Rest of your class
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46269772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档