1

以下のコードを使用していますが、表示されていないボタンがあります。そのうちの1つを削除するとボタンが表示されるので、「SetContentView」と関係があると思います。すべてが表示されるようにこれを回避する方法がわかりませんか?ありがとう!

import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;

import android.widget.Button;
import android.widget.TextView;

public class TestActivity extends Activity {
/** Called when the activity is first created. 
 * @return */



@Override
public void onCreate(Bundle savedInstanceState) {    
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);
    Button OffWifi = (Button)findViewById(R.id.offwifi);
    OffWifi.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) {                 
          WifiManager wifiManager = (WifiManager)getBaseContext().getSystemService(Context.WIFI_SERVICE);
            wifiManager.setWifiEnabled(false);          
          }        
      });



    TextView tv = new TextView(this);       
    TextView status = new TextView(this);                  


    WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
    WifiConfiguration wc = new WifiConfiguration();  
    wc.SSID = "\"Test\""; //IMP! This should be in Quotes!! 

    wc.hiddenSSID = true; 
    wc.status = WifiConfiguration.Status.ENABLED;      
    wc.priority = 10; 
    wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 
    wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN);  
    wc.allowedProtocols.set(WifiConfiguration.Protocol.WPA); 
    wc.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); 
    wc.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED); 
    wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); 
    wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP); 
    wc.preSharedKey = "\"Password\""; 
    WifiManager  wifiManag = (WifiManager) this.getSystemService(WIFI_SERVICE); 
    boolean res1 = wifiManag.setWifiEnabled(true); 
    int res = wifi.addNetwork(checkPreviousConfiguration(wc)); 
    Log.d("WifiPreference", "add Network returned " + res ); 
    boolean es = wifi.saveConfiguration(); 
    Log.d("WifiPreference", "saveConfiguration returned " + es ); 
    boolean b = wifi.enableNetwork(res, true);    
    Log.d("WifiPreference", "enableNetwork returned " + b );   

    tv.setText("You are now connected!  " +
            "Version 1.1");

    status.setText("The was an error connecting, please try again.");

       //@Override

    try {

        Thread.sleep(5000);

         ConnectivityManager connec = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 

         if (connec != null && (connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED) ||(connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED)){  
                //You are connected, do something online. 
                setContentView(tv);

            }else if (connec.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED ||  connec.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED ) {              
                //Not connected.         
               setContentView(status);
            }  

    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }





}

public WifiConfiguration checkPreviousConfiguration(WifiConfiguration wc) {
WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
 List<WifiConfiguration> configs = wifi.getConfiguredNetworks();     
    for(WifiConfiguration config : configs) {         
        if(config.SSID.equals(wc.SSID)) return config;     
        }     
    return wc; 
    } 

}

メインXMLファイル

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >

<TextView
android:id="@+id/tv"
android:layout_width="246dp"
android:layout_height="wrap_content" />


<Button
android:id="@+id/offwifi"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Turn Wifi Off" />

</LinearLayout>
4

3 に答える 3

1

アクティビティを開始し、コンテンツビューを少なくともボタンが入っているものに設定します。次に、TextViewsの新しいインスタンスを作成します。その後、OnCreateで、コンテンツビューをテキストビューの1つに設定します。接続されている場合、ビューはTextViewに置き換えられ、接続されていない場合、ビューはTextViewに置き換えられます。余分なセットコンテンツ呼び出しの1つを削除すると、接続されているかどうかに応じてボタンが表示されます。

この動作はあなたが望むものである可能性があります、またはあなたがしたいのは、レイアウトにTextViewsを追加し、FindViewByIdを使用してボタンのハンドルを取得するのと同じ方法でそれらのハンドルを取得することです。その後、textviewsはすでに新しいテキストで更新されているため、tryブロック内のすべてを回避できます。コードが現在行っていることは、レイアウト全体をテキストビューに置き換えることです。

于 2012-04-19T17:51:44.880 に答える
1

main.xmlレイアウトファイルでルートオブジェクトを取得する必要があります。

LinearLayout layout = (LinearLayout) findViewById( R.id.linearlayout1 );

次に、そのレイアウトに追加できます(linearlayout1という名前ではない可能性があります)。

layout.addView ( status );
于 2012-04-19T18:35:28.083 に答える
1

setContentView()は、ビューをディスプレイに追加せず、ビューを置き換えます。そのため、ボタンはなくなります。

新しいテレビを作成する代わりに、XMLレイアウトで既存のテレビを使用し、setContentReview()を1回だけ呼び出します。

このような:

super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button OffWifi = (Button)findViewById(R.id.offwifi);
OffWifi.setOnClickListener(new OnClickListener() { 
  public void onClick(View v) {                 
      WifiManager wifiManager = (WifiManager)getBaseContext().getSystemService(Context.WIFI_SERVICE);
        wifiManager.setWifiEnabled(false);          
      }        
  });


// remove these lines
// TextView tv = new TextView(this);       
// TextView status = new TextView(this);                  

// add this line
TextView tv= (TextView) findViewById(R.id.tv);


WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
WifiConfiguration wc....

 ect.ect. 

Log.d("WifiPreference", "enableNetwork returned " + b );   

// let's do this later
//tv.setText("You are now connected!  " +
//        "Version 1.1");

//status.setText("The was an error connecting, please try again.");

   //@Override

try {

    Thread.sleep(5000);

     ConnectivityManager connec = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 

     if (connec != null && (connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED) ||(connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED)){  

            //You are connected, do something online. 

            // setting the ContentView replaces everything, so don't do that
            //setContentView(tv);

            tv.setText("You are now connected!  " +
               "Version 1.1");



        }else if (connec.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED ||  connec.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED ) {              
            //Not connected.         


           //setContentView(status);
           tv.setText("The was an error connecting, please try again.");
        }  

} catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

}

于 2012-04-19T19:25:15.983 に答える