簡體   English   中英

使用以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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM