シリアル デバイスに接続するアプリがあります。アプリケーションを起動するときに設定を非表示にしたいので、linearlayout を非表示に設定し、削除しました。ただし、これは接続が確立されていないことを意味します。ビューが非表示に設定されている場合、スピナーに設定したデフォルト値が読み取れないという問題があります。これはなぜですか、どうすれば修正できますか。
設定が非表示のときに接続した場合、設定を開くと接続は正常に機能します。
したがって、両方のレイアウトが次のように表示されていれば問題なく動作します: http://i.imgur.com/N5cU0Wg.png
設定レイアウトが見えない場合は正常に動作します: http://i.imgur.com/hIttP24.png
しかし、それがなくなった場合、設定を引き出すまで機能しません: http://i.imgur.com/ViJUgf3.png
onCreate でデフォルト 9600 で作成したスピナーの例を次に示します。
mBaudSpinner = (Spinner) findViewById(R.id.bannerBaudSpinner);
ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(
this, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mBaudSpinner.setAdapter(adapter);
String[] tempArray = SlickUSB2Serial.BAUD_RATES;
for (int i = 0; i < tempArray.length; i++) {
adapter.add(tempArray[i]);
}
mBaudSpinner.setSelection(SlickUSB2Serial.BaudRate.BAUD_9600.ordinal());
編集:
接続が見つかったときに発生するコードを次に示しますが、ビューがなくなったときに呼び出されません。ここにライブラリ メソッドを実装しました。
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position,
long id) {
//bannerView.setVisibility(View.INVISIBLE);
//bannerView.setVisibility(View.GONE);
// TODO Auto-generated method stub
Log.d(TAG3, "in onItemSelected");
changeSelectedAdapter(mDeviceAdapters.get(position));
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
public void changeSelectedAdapter(USB2SerialAdapter adapter) {
Toast.makeText(this, "in changeselectedadapter", Toast.LENGTH_SHORT)
.show();
// if(mSelectedAdapter!=null){
// mDeviceOutputs.set(mDeviceSpinnerAdapter.getPosition(mSelectedAdapter.getDeviceId()+""),mReceiveBox.getText().toString());
Log.d(TAG3, "in change selected adapter");
mSelectedAdapter = adapter;
mBaudSpinner.setSelection(adapter.getBaudRate().ordinal());
mDataSpinner.setSelection(adapter.getDataBit().ordinal());
mParitySpinner.setSelection(adapter.getParityOption().ordinal());
mStopSpinner.setSelection(adapter.getStopBit().ordinal());
updateCurrentSettingsText();
// mReceiveBox.setText(mDeviceOutputs.get(mDeviceSpinner.getSelectedItemPosition()));
Toast.makeText(this,
"Adapter switched toooo: " + adapter.getDeviceId() + "!",
Toast.LENGTH_SHORT).show();
String getInitialPrompt = "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\n";
try {
sendOverSerial(getInitialPrompt.getBytes("UTF-8"));
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.d(TAG, "exception");
}
}
@Override
public void onAdapterConnected(USB2SerialAdapter adapter) {
adapter.setDataListener(this);
mDeviceAdapters.add(adapter);
mDeviceOutputs.add("");
mDeviceSpinnerAdapter.add("" + adapter.getDeviceId());
mDeviceSpinner.setSelection(mDeviceSpinnerAdapter.getCount() - 1);
Toast.makeText(this,
"Adapter: " + adapter.getDeviceId() + " Connected!",
Toast.LENGTH_SHORT).show();
}
これは呼び出されます:
public void onAdapterConnected(USB2SerialAdapter adapter) {
adapter.setDataListener(this);
mDeviceAdapters.add(adapter);
mDeviceOutputs.add("");
mDeviceSpinnerAdapter.add("" + adapter.getDeviceId());
mDeviceSpinner.setSelection(mDeviceSpinnerAdapter.getCount() - 1);
Toast.makeText(this,
"Adapter: " + adapter.getDeviceId() + " Connected!",
Toast.LENGTH_SHORT).show();
}
これを呼び出す必要がありますが、そうではありません:
public void onItemSelected(AdapterView<?> parent, View view, int position,
long id) {
//bannerView.setVisibility(View.INVISIBLE);
//bannerView.setVisibility(View.GONE);
// TODO Auto-generated method stub
Log.d(TAG3, "in onItemSelected");
changeSelectedAdapter(mDeviceAdapters.get(position));
}
onItemListener への唯一の参照は onCreate にあるため、スピナーが「なくなった」ため処理されていませんか?
mDeviceSpinner = (Spinner) findViewById(R.id.bannerDeviceSpinner);
mDeviceSpinnerAdapter = new ArrayAdapter<CharSequence>(this,
android.R.layout.simple_spinner_item);
mDeviceSpinnerAdapter
.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mDeviceSpinner.setAdapter(mDeviceSpinnerAdapter);
mDeviceSpinner.setOnItemSelectedListener(this);
ここにmSelectedadapterのドキュメントがあります、i.imgur.com/Ezigt7G.png
私のアプリでは次のように定義されています。
private static USB2SerialAdapter mSelectedAdapter;