2017-02-13 62 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「? –