【问题标题】:Change the background image of frame layout using Java使用Java更改框架布局的背景图像
【发布时间】:2017-07-01 19:14:44
【问题描述】:

我有一个框架布局,想根据数组的当前状态更改背景图像/颜色。我可以根据数组更改文本,因此了解如何执行此操作,但找不到引用布局的方法。

我在创建后初始化了框架布局 (li),但是当我尝试在后面的方法中更改颜色时,我收到错误“无法从静态上下文引用非静态字段 'li'”。

任何帮助表示赞赏

public class GridViewFragmentActivity extends FragmentActivity
{
    FrameLayout li;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        FrameLayout li =(FrameLayout) findViewById(R.id.framelayout);

        final DotsPageIndicator mPageIndicator;
        final GridViewPager mViewPager;

        final String[][] data =
                {
                { "Row 0, Col 0", "Row 0, Col 1", "Row 0, Col 2", "Row 0, Col 3" },
                { "Row 1, Col 0", "Row 1, Col 1", "Row 1, Col 2" },
                { "Row 2, Col 0", "Row 2, Col 1", "Row 2, Col 2" }
        };

        // Get UI references
        mPageIndicator = (DotsPageIndicator) findViewById(R.id.page_indicator);
        mViewPager = (GridViewPager) findViewById(R.id.pager);

        // Assigns an adapter to provide the content for this pager
        mViewPager.setAdapter(new GridPagerAdapter(getFragmentManager(), data));
        mPageIndicator.setPager(mViewPager);
    }



    private static final class GridPagerAdapter extends FragmentGridPagerAdapter {


        String[][] mData;

        private GridPagerAdapter(FragmentManager fm, String[][] data)
        {
            super(fm);
            mData = data;

        }

        @Override
        public Fragment getFragment(int row, int column)
        {
            String text = "CARD FRAGMENT";
            if (row == 2 && column == 1)
            {
                text = "SIT UP";
                li.setBackgroundColor(Color.parseColor("#FFFFFF"));
            }
            else
            {
                text = "PRESS UP";
                li.setBackgroundColor(Color.parseColor("#FF0000"));
            }
            return (CardFragment.create(text, mData[row][column]));
        }

        @Override
        public int getRowCount()
        {
            return mData.length;
        }

        @Override
        public int getColumnCount(int row)
        {
            return mData[row].length;
        }
    }
}

【问题讨论】:

标签: android methods colors static


【解决方案1】:

通过 GridPagerAdapter 构造函数传递布局并保存在变量中。

private static final class GridPagerAdapter extends FragmentGridPagerAdapter {


    private final FrameLayout li;
    String[][] mData;

    private GridPagerAdapter(FragmentManager fm, String[][] data, FrameLayout li)
    {
        super(fm);
        mData = data;
        this.li = li;
    }

    //... stuff
}

然后相应地修改你的 onCreate 方法

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    FrameLayout li =(FrameLayout) findViewById(R.id.framelayout);

    final DotsPageIndicator mPageIndicator;
    final GridViewPager mViewPager;

    final String[][] data =
            {
            { "Row 0, Col 0", "Row 0, Col 1", "Row 0, Col 2", "Row 0, Col 3" },
            { "Row 1, Col 0", "Row 1, Col 1", "Row 1, Col 2" },
            { "Row 2, Col 0", "Row 2, Col 1", "Row 2, Col 2" }
    };

    // Get UI references
    mPageIndicator = (DotsPageIndicator) findViewById(R.id.page_indicator);
    mViewPager = (GridViewPager) findViewById(R.id.pager);

    // Assigns an adapter to provide the content for this pager
    mViewPager.setAdapter(new GridPagerAdapter(getFragmentManager(), data, li));
    mPageIndicator.setPager(mViewPager);
}

【讨论】:

  • 似乎可以工作,除了我在 mViewPager.setAdapter 行上没有收到错误,因为由于向 GridPageAdapter 方法添加了 FrameLayout li,它需要 3 个参数。 imgh.us/Screen_Shot_2017-02-13_at_19.54.42.jpg
  • 替换 mViewPager.setAdapter(new GridPagerAdapter(getFragmentManager(), data));与 mViewPager.setAdapter(new GridPagerAdapter(getFragmentManager(), data, li));因为您需要将布局从活动传递到适配器。
  • 更新。现在应该更容易理解了。
猜你喜欢
  • 2012-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-21
  • 1970-01-01
  • 2014-04-29
相关资源
最近更新 更多