[英]BaseAdapter don't hide layout with setVisibility(View.GONE)
[英]Issue using values from layout that starts with setVisibility(View.GONE);
我有一個連接到串行設備的應用程序。 當我啟動我的應用程序時,我希望設置被隱藏,因此我將linearlayout設置為invisible並消失了。 但是,這意味着未建立連接。 有一個問題,如果視圖設置為不可用,則無法讀取在微調器中設置的默認值,這是為什么,以及如何解決。
如果設置隱藏並且可以連接,則打開設置后,連接正常。
因此,如果兩個布局都這樣顯示,則效果很好: 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;
問題是,盡管適配器已連接,但由於未調用onItemSelected而未調用changeSelectedAdapter。 這是因為如果將視圖設置為走了,則不能選擇一個項目嗎?
解決此問題的兩種方法:
建立連接后手動調用它:
changeSelectedAdapter(mSelectedAdapter);
或者,當適配器連接時,我可以設置一些默認值:
mSelectedAdapter = adapter;
mSelectedAdapter.setCommSettings(BaudRate.BAUD_9600, DataBits.DATA_8_BIT, ParityOption.PARITY_NONE, StopBits.STOP_1_BIT);
第三種方法是使視圖可見,但是通過編程將大小設置為一些小尺寸,然后可以根據需要將其更改回所需的大小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.