2013-09-29 73 views
0

===根本原因===當它被包含在一個片段onItemSelected不觸發

onItemSelected工作正常,爲下面的問題我所描述的,原因是我剛纔分支一些代碼來ArrayAdapter.notifyDataSetInvalidated()。對我的教訓是:

*當AdapterView上發生「無響應」時,請檢查適配器。

感謝給我任何建議的朋友。

===================

我想有一個片段的微調,但onItemSelected不能正常工作,請你告訴我理由,非常感謝。

這裏是活動佈局的xml:

<LinearLayout> 
<!-- onItemSelected works fine when the spinnerConnector defined in activity layout --> 
<Spinner 
    android:id="@+id/spinnerConnectors" 
    android:spinnerMode="dropdown" /> 
<!-- move spinnerConnectors into this fragment will cause the problem - onItemSelected not work 
<fragment 
    android:id="@+id/fragmentConnectors" 
    android:name="com.sharework.transproxy.android.ConnectorsFragment" 
    tools:layout="@layout/list_fragment1" /> 
--> 
</LinearLayout> 

ConnectorsFragment

public class ConnectorsFragment extends android.app.Fragment{ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
       // create adapter ... 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.connectors_fragment, null); 
    Spinner spinnerConnectors = (Spinner) view 
      .findViewById(R.id.spinnerConnectors); 
    spinnerConnectors.setAdapter(adapter); 
    return view; 
} 

@Override 
public void onActivityCreated(Bundle bundle) { 
    super.onActivityCreated(bundle); 
    Spinner spinnerConnectors = (Spinner) getView().findViewById(
      R.id.spinnerConnectors); 
      spinnerConnectors 
      .setOnItemSelectedListener(new OnItemSelectedListener() { 

       @Override 
       public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
     // **** code to handle onItemSelected but not trigged 
} 

       @Override 
       public void onNothingSelected(AdapterView<?> arg0) { 
       } 
      }); 
} 

} ConnectorsFragment

佈局

<LinearLayout> 

<Spinner 
    android:id="@+id/spinnerConnectors" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:spinnerMode="dropdown" /> 

</LinearLayout> 

活動

public class FactoryMonitorActivity TransProxyActivity{ 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_factory_monitor); 
    // invoke ConnectorsFragment.start to query for connectors and fill into the adapter 
     } 
} 

承擔責任:水災任何人的幫助,謝謝!

+0

我假設你從活動中刪除微調,並將其保留在片段中?你的結果是什麼?你真的看到微調,你可以選擇一個項目,但方法沒有觸發? – fasteque

+0

我可以看到它,但是當我選擇不同項目時沒有任何反應。 –

+0

@ Peter.Peng你說你有活動佈局的微調。你有'spinner_fragment.xml'中的微調。 – Raghunandan

回答

0

從活動中刪除與微調控件相關的所有內容(也許您錯過了在測試過程中刪除的內容),然後將spinnerConnectors作爲片段的類變量。因此,您只需要一次查看視圖(此操作對性能有影響),並且在下次使用微調器時,您不必在方法內聲明局部變量。

+0

謝謝,我會改善它,但它可以解決問題嗎? –

+0

以這種方式更改代碼並嘗試一下。我一直這樣做,從來沒有問題。 – fasteque

+0

謝謝,我會試試看。 –

相關問題