2016-07-24 54 views
-2

方法onItemSelected不起作用,我不知道爲什麼。方法「onItemSelected」不適用於陣列適配器,也適用於片段

以下是我的代碼。

陣列適配器:

public class MyListAdapter extends ArrayAdapter { 
    Spinner spinner; 
    ListView listView; 

    /*public MyListAdapter(Context context, int textViewResourceId) { 
     super(context, textViewResourceId); 
    }*/ 

    public MyListAdapter(Context context) { 
     super(context, R.layout.single_listview_item); 
    } 




    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View row = convertView; 

     spinner = (Spinner) convertView.findViewById(R.id.simpleSpinner); 
     ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
       getContext(), 
       R.array.country_arrays, 
       android.R.layout.simple_spinner_item); 
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinner.setAdapter(adapter); 
     System.out.println("ciao1"); 

     // spinner.setOnItemSelectedListener(this); 

     return row; 
    } 



    /* @Override 
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
     String selState = (String) spinner.getSelectedItem(); 
     System.out.println(selState); 
     Toast.makeText(
       getContext(), 
       "Clicked on Planet: " + selState + "", Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onNothingSelected(AdapterView<?> parent) { 

    }*/ 

    } 

片段:

ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_list2, container, false); 
     listView = (ListView) rootView.findViewById(R.id.listview); 
     ListAdapter listAdapter = new MyListAdapter(getContext()); 
     listView.setAdapter(listAdapter); 
//  listView.setOnItemClickListener(this); 
     listView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 
     { 
      public void onItemSelected(AdapterView<?> parent, View view, int position, long i) 
      { 
       listView.setSelection(position); 
       String selState = (String) listView.getSelectedItem(); 
       Toast.makeText(
         getContext(), 
         "Clicked on Planet: " + selState + "", Toast.LENGTH_SHORT).show(); 

      } 

      @Override 
      public void onNothingSelected(AdapterView<?> arg0) { 
       // TODO Auto-generated method stub 

      } 
     }); 

回答

0

您使用onItemClicked列表視圖。 OnItemSelected適用於紡紗廠。這是這些Android的滋擾之一...

+0

我必須使用方法數組適配器或片段? –

+0

我該如何編寫代碼才能將對象名稱添加到微調列表中? –

+0

你能幫我嗎? –

-1

在你的ArrayAdapter內設置OnItemSelectedListener(this)的方法,我相信這個問題是,由於列表中的每個微調引用的MyListAdapter相同的實例,你OnItemSelected方法不區分哪個你的列表中的微調實際上是從 - 它只是引用最後設置爲MyListAdapter.spinner引用的微調對象,它應該是列表中的最後一個。

要解決這個問題,請不要使用spinner.getSelectedItem()。而是使用((Spinner) parent).getSelectedItem(),因爲父對象將是從中選擇的實際微調器。在這一點上,你應該使微調框局部變量爲getView方法。

在片段中調用listView.setOnItemSelectedListener(...)的方法中,我希望你的意思是擁有listView.setOnItemClickListener(...),但是它會監聽列表中某一行的點擊,而不是來自微調控件的選擇。

要檢測您的某個紡紗廠的選擇,請進行上面的第一個修改。要檢測listView中的某一行上的點擊,請更改爲listView.setOnItemClickListener。如果沒有更多關於你的目標或發生實際錯誤的背景,很難判斷是否需要雙方或第一方。

編輯: 從您的意見,我認爲你應該在你的MyListAdapter有這樣的:

public class MyListAdapter extends ArrayAdapter implements AdapterView.OnItemSelectedListener { 

public MyListAdapter(Context context) { 
    super(context, R.layout.single_listview_item); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View row = convertView; 

    Spinner spinner = (Spinner) row.findViewById(R.id.simpleSpinner); 
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
      parent.getContext(), 
      R.array.country_arrays, 
      android.R.layout.simple_spinner_item); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner.setAdapter(adapter); 
    spinner.setOnItemSelectedListener(this); 

    return row; 
} 

@Override 
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
    String selState = (String) ((Spinner) parent).getSelectedItem(); 
    System.out.println(selState); 
    Toast.makeText(
      parent.getContext(), 
      "Clicked on Planet: " + selState + "", Toast.LENGTH_SHORT).show(); 
} 

@Override 
public void onNothingSelected(AdapterView<?> parent) { 

} 

} 

這在你的片段(沒有聽衆):

ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_list2, container, false); 
    listView = (ListView) rootView.findViewById(R.id.listview); 
    ListAdapter listAdapter = new MyListAdapter(getContext()); 
    listView.setAdapter(listAdapter); 
+0

對不起,你能寫代碼嗎? –

+0

當我點擊對象時,如何顯示吐司與我單擊的對象的名稱? –

+0

進一步查看您的代碼後,我失去了一些信心。你能澄清你想要做什麼嗎?你的代碼看起來像是在創建一個包含一個微調器的單行ListView,而這看起來完全是多餘的。看起來好像你已經將兩個不同的創建可選列表的方法(一個簡單的微調控件與一個帶有OnItemClickListener的ListView)混合在一起。你想要一個紡紗廠的名單還是隻有一個紡紗廠? – jawheele

相關問題