0

A.Class でボタンを宣言し、無効に設定しました。

public static Button s1=(Button)findViewById(R.id.sn1);
s1.setEnabled(false);

今、私は別のクラス(B.class)でこのボタンを有効にしたいです私は Button s2=A.s1; を与えてこのボタンを有効にしようとしました。しかし、「Activity 型から非静的メソッド findViewById(int) への静的参照を作成できません」というエラーがスローされます。

Plsはエラーを修正するのを手伝ってくれます

    `First Class:

    public class Mapper extends Activity implements OnClickListener 
    {
public static int sng=0,c=0;
public static double lat;
public static double lon;
public String placenametemp;
public Bundle savedInstanceState;
public static int chk= MapMe.check;
 LocationManager locman1= MapMe.locman;
 MyOwnLocationOverlay mylocover=MapMe.myLocationOverlay;
public MediaPlayer msong=MapMe.mp;
***public Button s1=(Button)findViewById(R.id.sn1);***



@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

 // Add Click listeners for all buttons
    View firstButton = findViewById(R.id.geocode_button);
    firstButton.setOnClickListener(this);
    View secondButton = findViewById(R.id.latlong_button);
    secondButton.setOnClickListener(this);
    View thirdButton = findViewById(R.id.presentLocation_button);
    thirdButton.setOnClickListener(this);
    View selectsong=findViewById(R.id.song_select);
    selectsong.setOnClickListener(this);
    s1.setOnClickListener(this);
    s1.setEnabled(false);


    }
 }


Second Class :
    public class MapMe extends MapActivity implements LocationListener 
  {

Button s1=(Button)findViewById(R.id.sn1);
public void onCreate(Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);  // Suppress title bar to give more space
    setContentView(R.layout.mapme); 

    updateGPSprefs();

    // Set up location manager for determining present location of phone
    locman = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 

    // Listener for GPS Status...   
    final GpsStatus.Listener onGpsStatusChange = new GpsStatus.Listener(){
        public void onGpsStatusChanged(int event){
            switch(event){
                case GpsStatus.GPS_EVENT_STARTED:
                    // Started...
                break;
                case GpsStatus.GPS_EVENT_FIRST_FIX:
                    // First Fix...
                    Toast.makeText(MapMe.this, "GPS has First fix",       
                     Toast.LENGTH_LONG).show();
                break;
                case GpsStatus.GPS_EVENT_STOPPED:
                    // Stopped...
                break;
                case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
                    // Satellite update
                break;
            }
            GpsStatus status = locman.getGpsStatus(null);


            Iterable<GpsSatellite> satlist = status.getSatellites();
        }
    };
   public  void fu(double a,double b,double c,double d)
{

    if((val==0)&&(val1==0))
            {
        mp.reset();
        try {

            check=1;
            System.out.println("matched");
            mp.setDataSource(link1);
            mp.prepare();
            mp.start();
            Toast.makeText(MapMe.this, "playing", Toast.LENGTH_LONG).show();
            System.out.println("Song button1");
            ***s1.setEnabled(true);***
           System.out.println("Song button");
        }

        catch(Exception e)
        {

        }
        }

`

4

2 に答える 2

0

間違った場所でfindViewById()を呼び出しています。onCreate()などの非静的メソッド内から呼び出す必要があります。このメソッド、つまりfindViewById()は静的ではないため、前述のように呼び出すことはできません。したがって、変数を静的として宣言してから、アクティビティのonCreate()でその値を設定する必要があります。

BクラスでfindViewById()を呼び出してから、ビューを無効にしないのはなぜですか。ビューが現在ロードされているレイアウトで使用可能である限り、Bクラスの次のコードが機能します。

Button s1=(Button)findViewById(R.id.sn1);
s1.setEnabled(false);
于 2012-08-23T11:51:26.033 に答える
0

クラスA内:

public static Button s1=(Button)findViewById(R.id.sn1);
s1.setEnabled(false);

クラス B の内部:

あなたは書くべきです:A.s1.setEnabled(true);

編集済み

Mapper.java 内:

Class Mapper extends Activity{

public static Button s1;
@Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

                s1=(Button)findViewById(R.id.sn1);
                s1.setEnabled(false);

    }
}

Mapme.java 内:

Class Mapme extends Activity{


@Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_new);


                Mapper.s1.setEnabled(true);

    }
}

これを試してください。あなたを助けるかもしれません。

于 2012-08-23T11:38:48.147 に答える