마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Spinner에서 item을 select했을 때 리슨을 못하는 이유

0 추천
package com.example.drone_proj;

import java.util.ArrayList;
import java.util.List;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity {
	// for TAG
	private static final String TAG = "DRONE_PROJ";
	private static int num = 0;
	// UI variables
	private Button connectToDrone;
	private Button ctrl;
	private Spinner spin;

	// WifiManager variable
	private WifiManager wifiManager;

	// ScanResult List
	private List<ScanResult> scanResultList;

	// SSID List of ScanResult List
	private List<String> ssidList = new ArrayList<String>();

	// Spinner Adapter
	private ArrayAdapter<String> spinnerAdpt;
	// exception of initiating Spinner
	private boolean initSpinner;

	// BroadcastReceiver
	private BroadcastReceiver mReceiver = new BroadcastReceiver() {
		@Override
		public void onReceive(Context context, Intent intent) {
			final String action = intent.getAction();

			if (action.equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {
				Log.d(TAG, "available");
				getWifiScanResult(); // get WIFISCanResult
				wifiManager.startScan(); // for refresh
			} else if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
				Log.d(TAG, "changed");
				sendBroadcast(new Intent("wifi.ON_NETWORK_STATE_CHANGED"));
			}
		}
	};

	public void initWifiScan() {
		// Setup WIFI
		Log.d(TAG, "Call initWifiScan()");

		wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
		Log.d(TAG, "WifiManager get SystemService");
		// if WIFIEnabled
		if (wifiManager.isWifiEnabled() == false) {
			wifiManager.setWifiEnabled(true);
		}

		IntentFilter filter = new IntentFilter(
				WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
		filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
		registerReceiver(mReceiver, filter);
		wifiManager.startScan();
	}

	public void getWifiScanResult() {
		Log.d(TAG, "Call getWifiScanResult()");
		// Get ScanResult
		scanResultList = wifiManager.getScanResults();

		for (int i = 0; i < scanResultList.size(); i++) {
			ScanResult result = scanResultList.get(i);

			ssidList.add(result.SSID);
		}
		unregisterReceiver(mReceiver);
		this.connectAdptToSpinner();
	}

	// Connect Adapter
	public void connectAdptToSpinner() {
		Log.d(TAG, "Call ConnectAdptToSpinner()");

		// Setup spinAdpt & connect spinner to adapter
		spinnerAdpt = new ArrayAdapter<String>(this,
				android.R.layout.simple_list_item_1, ssidList);
		spinnerAdpt
				.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		spin.setAdapter(spinnerAdpt);
	}

	/** Called when the activity is first created */
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		// Setup UI
		connectToDrone = (Button) findViewById(R.id.connectToDrone);
		ctrl = (Button) findViewById(R.id.ctrl);
		spin = (Spinner) findViewById(R.id.wifiSpinner);
		spin.setOnItemSelectedListener(sOnItemSelectedListener);
		
		Log.d(TAG, "Complete Setup UI");
		
		// Initiate Wifi Scan
		this.initWifiScan();

		// Button
		connectToDrone.setOnClickListener(new Button.OnClickListener() { 
			public void onClick(View v) {
				Log.d(TAG, "Call connectToDrone onClick()");
				spin.performClick();
				Log.d(TAG, "spin.performClick");
			}
		});
		ctrl.setOnClickListener(new Button.OnClickListener() {
			public void onClick(View v) {
				Intent intentControlActivity = new Intent(MainActivity.this,
						ControlActivity.class);
				startActivity(intentControlActivity);
			}
		});
		Log.d(TAG, "Complete Setup Button");

	}

	private OnItemSelectedListener sOnItemSelectedListener = new OnItemSelectedListener() {
		@Override
		public void onItemSelected(AdapterView<?> parent, View view,
				int position, long id) {
			Log.d(TAG, "enter");
			if (!initSpinner) {
				Log.d(TAG, Boolean.toString(initSpinner));
				initSpinner = true; 
				return;
			}
			Log.d(TAG, "???????????????");
			String selectedWifi = spinnerAdpt.getItem(position);
			Log.d(TAG, selectedWifi);
			printToast(selectedWifi + "가 선택되었습니다");
			return;
		}

		@Override
		public void onNothingSelected(AdapterView<?> parent) {
			Log.d(TAG, "enter");
		}

	};

	public void connectToWifi() { 

	}

	public void printToast(String messageToast) {
		Toast.makeText(this, messageToast, Toast.LENGTH_LONG).show();
	}

	
	
	/** Don't use */
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}
}

 

 와이파이 ssid를 spinner에 띄워서

 특정 ssid 선택시 toast를 띄우려고 하는데요

 

 현재까지 되는건 와이파이 ssid가 spinner에 띄워지는 거까지구요

 select하면 화면상으로는 select되고 원래 activity로 돌아갑니다

 그런데 toast가 안 떠요

 

 onNothingSelect에도 toast해놨는데 아예 셀렉트가 안 되는지 

 그 toast도 안뜨구요

 

 뭐가 문제인지 잘 모르겠어요 부탁드립니다

(참고로 manifest에 와이파이 엑세스 같은건 다 해놨어요)

뀨뮴뀨 (120 포인트) 님이 2015년 1월 24일 질문

1개의 답변

0 추천
printToast 함수에 makeText시에 this부분을

Context 변수를 하나 선언하여 설정해 보시거나

함수를 printToast(Context context, String messageToast) 로 변경하여

사용시에 printToast(this, "메시지"); 등으로 활용을 해보시거나

 

두가지 방법을 혼용하여

전역으로

Context mContext 와 같은 전역 변수를 선언 하여

printToast(mContext, "메시지"); 와 같이 사용해보세요

mContext 는 onCreate 에서 초기화 시켜주는 방식으로 사용하시구요

mContext = this;
익명사용자 님이 2015년 1월 26일 답변
...