2012-04-19 14 views
1

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

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> 

答えて

1
と(それがlinearlayout1命名されていない場合があります)、あなたはそのレイアウトに追加することができ、すなわち

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

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

setContentView()は表示を表示に追加せず、表示を置き換えます。だからこそあなたのボタンは消え去っています。

新しいレイアウトを作成するのではなく、既存のtvを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(); 
} 

}

+0

ありがとうございます!それは働いた – user1342164

1

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

この動作は、希望どおりにするか、レイアウトにTextViewを追加して、ボタンのハンドルをFindViewByIdと同じ方法でハンドルを取得することができます。テキストブロックがすでに新しいテキストで更新されているため、tryブロック内のすべてを避けることができます。あなたのコードが現在行っているのは、レイアウト全体をテキストビューに置き換えることです。

+0

は、あなたは私の例を示していることはできますか?私は非常にjavaに新しいです。ありがとうございます – user1342164

1

あなたは

layout.addView (status); 
+0

これは私のXMLファイルにあるものです。だから私は別の線形レイアウトを追加しますか? – user1342164

+0

TextViewテキストを設定するには、if-elseステートメントを使用するだけです。 2つの新しいTextViewを作るのではなく、 'TextView tv =(TextView)findViewbyId(R.id.tv);で1つ作成し、tryブロックでifelseを使ってテキストを設定してください。 –

関連する問題