2016-07-24 55 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

相关问题