2015-05-01 2 views
0

Я не могу получить доступ к методу, помеченному **** (setScrollViewListener) из класса DetectHere. Даже вне класса (т. Е. Из метода onCreate) DetectHere метод setScrollViewListener действителен. создали класс SSScrollView, чтобы узнать, когда полоса прокрутки достигает конца прокрутки.не может получить доступ к методу во вложенном классе

package com.example.mee.layoutcreate;  
import ...  

public class MainActivity extends ActionBarActivity { 


    public interface ScrollViewListener { 
     void onScrollChanged(SSScrollView scrollView, int x, int y, int oldx, int oldy); 
             } 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     final SSScrollView scroll=new SSScrollView(this);  


     public class DetectHere implements ScrollViewListener { 

       scroll.setScrollViewListener(this); ********************* cannot access this method 

      @Override 
      public void onScrollChanged(SSScrollView scrollView, int x, 
             int y, int oldx, int oldy) { 

              return; 
                    } 
                   } 
                 } 
                } 


    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
             } 
     return super.onOptionsItemSelected(item); 
                 } 
                  } 


Here is the class SSScrollView          





package com.example.mee.layoutcreate; 
    import... 

    public class SSScrollView extends ScrollView { 

     private MainActivity.LDObservableScrollViewListener scrollViewListener = null; 

     public SSScrollView(Context context) { 
      super(context); 
     } 

     public SSScrollView(Context context, AttributeSet attrs, int defStyle) { 
      super(context, attrs, defStyle); 
     } 

     public SSScrollView(Context context, AttributeSet attrs) { 
      super(context, attrs); 
     } 

     public void setScrollViewListener(MainActivity.LDObservableScrollViewListener scrollViewListener) { 
      this.scrollViewListener = scrollViewListener; 
     } 

     @Override 
     protected void onScrollChanged(int x, int y, int oldx, int oldy) { 
      super.onScrollChanged(x, y, oldx, oldy); 
      if(scrollViewListener != null) { 
       scrollViewListener.onScrollChanged(this, x, y, oldx, oldy); 
      } 
     } 

    } 
+0

является внутренним классом 'DetectHere' или в отдельном файле? – Yurets

+0

Внутренний класс, внутри метод oncreate –

+0

, вы должны обязательно сделать его 'private' и поставить его вне любых методов. – Yurets

ответ

0

Проблема заключается в том, что слушателю требуется параметр Context. Поскольку DetectHere не распространяется от Activity, вы не можете установить его внутри. Вы должны создать конструктор, как показано ниже:

private Context ctx; 

public DetectHere (Context ctx){ 
    this.ctx = ctx; 
{ 

, а затем установить слушатель:

scroll.setScrollViewListener(ctx); 

Но на самом деле в вашем случае DetectHere является самим слушателем. Так что в вашем Activity вам нужно установить его как:

scroll.setScrollViewListener(new DetectHere()); 

и реализовать эти методы класса, то IDE намекнет вам сделать это.

Надеюсь, это то, о чем вы просите, и это поможет вам.