2017-02-13 59 views
0

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

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

任何帮助,通过GridPagerAdapter构造赞赏

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; 
     } 
    } 
} 
+0

http://stackoverflow.com/questions/2559527/non-static-variable-cannot-be-referenced-from-a-static-context – yosriz

回答

1

通行证布局和保存在一个变量。

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); 
} 
+0

似乎工作,但我没有得到mViewPager.setAdapter行的错误,因为它需要3个参数,因为将FrameLayout li添加到GridPageAdapter方法。 http://imgh.us/Screen_Shot_2017-02-13_at_19.54.42.jpg –

+0

替换 mViewPager.setAdapter(new GridPagerAdapter(getFragmentManager(),data)); with mViewPager.setAdapter(new GridPagerAdapter(getFragmentManager(),data,li)); ,因为您需要将布局从活动传递到适配器。 –

+0

现在只是得到“不能解析符号”li“? –