2017-02-13 7 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

GridViewAdapterメソッドにFrameLayoutを追加したため、3つの引数を必要とするため、mViewPager.setAdapter行にエラーが表示されません。 http://imgh.us/Screen_Shot_2017-02-13_at_19.54.42.jpg –

+0

を置き換えます。 mViewPager.setAdapter(new GridPagerAdapter(getFragmentManager()、data)); と mViewPager.setAdapter(新しいGridPagerAdapter(getFragmentManager()、data、li)); アクティビティからアダプタにレイアウトを渡す必要があるためです。 –

+0

「今すぐシンボル「li」を解決できません」 –

関連する問題