2014-05-15 58 views
0

当我把我的onclick听众在我的片段进行微调,我得到这个强制关闭:强制关闭时onClicklistener设置微调

05-15 16:28:59.266 11419-11419/com.beerportfolio.beerportfoliopro W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x41576d40) 
05-15 16:28:59.356 11419-11419/com.beerportfolio.beerportfoliopro E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.beerportfolio.beerportfoliopro, PID: 11419 
    java.lang.RuntimeException: setOnItemClickListener cannot be used with a spinner. 
      at android.widget.Spinner.setOnItemClickListener(Spinner.java) 
      at com.beerportfolio.beerportfoliopro.BreweryPage2.onCreateView(BreweryPage2.java:57) 
      at android.support.v4.app.Fragment.performCreateView(Fragment.java:1500) 
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:938) 
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1115) 
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1097) 
      at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1895) 
      at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1514) 
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:958) 
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1115) 
      at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 
      at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1478) 
      at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:446) 
      at android.os.Handler.handleCallback(Handler.java) 
      at android.os.Handler.dispatchMessage(Handler.java) 
      at android.os.Looper.loop(Looper.java) 
      at android.app.ActivityThread.main(ActivityThread.java) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java) 
      at dalvik.system.NativeStart.main(Native Method) 

我的片段是这样的:

public class BreweryPage2 extends Fragment { 

    public BreweryPage2(){} 

    String breweryId = ""; 
    SearchView searchView; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     View rootView = inflater.inflate(R.layout.brewery_page, container, false); 
     setHasOptionsMenu(true); 


     //get user information 
     SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); 
     String userName = prefs.getString("userName", null); 
     final String userID = prefs.getString("userID", null); 

     //todo: get brewery id from shared preferences 
     final String breweryId = prefs.getString("breweryID", null); 

     //set spinner up 
     final Spinner visitedBrewery = (Spinner) rootView.findViewById(R.id.visitSpinner); 

     //set spinner onCLick 
     visitedBrewery.setOnItemClickListener(new AdapterView.OnItemClickListener() 
     { 
      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) { 
       String choice = visitedBrewery.getSelectedItem().toString(); 

       if (choice.equals("yes")){ 
        //add to database 
        //construct url 
        String url = "myURL"; 

        //async task to get beer taste tag percents 
        new AddBreweryVisit(getActivity()).execute(url); 

       } 

       else{ 
        //delete from database 
        String url = "myURL2"; 

        //async task to get beer taste tag percents 
        new KillBreweryVisit(getActivity()).execute(url); 

       } 




      } 
     }); 



     //construct url 
     String url = "myURL3"; 

     Log.d("visit" , url); 

     //async task to get beer taste tag percents 
     new GetBreweryDataJSON(getActivity() , visitedBrewery).execute(url); 



     return rootView; 
    } 

} 

线57是这一行:

visitedBrewery.setOnItemClickListener(new AdapterView.OnItemClickListener() 
+0

添加一个View.OnClickListener到你的微调,而不是AdapterView.OnItemClickListener – rekaszeru

+0

片段布局似乎不包含'visitSpinner' – laalto

+0

我同意rekaszeru。 –

回答

0

这很可能是更容易把..

然后让BreweryPage2执行它。

有可能是一个更简单的方法,但是这就是我倾向于这样做,我已经没有任何问题尚未

+0

是这样的吗? https://gist.github.com/anonymous/fa58fa0628b87b2e3960 因为没有工作 – Mike

+0

如果你把“visitedBrewery.setOnItemClickListener(this);”然后右键单击它,然后让它实现它,然后右键单击“BreweryPage2”并添加未实现的方法,然后执行您所需要的操作 – SimplisticApps

+0

不确定这是否适用于Android工作室 – Mike

0

你可以按照这个例子。如

文件:RES /值/ strings.xml中

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

    <string name="app_name">MyAndroidApp</string> 
    <string name="country_prompt">Choose a country</string> 

    <string-array name="country_arrays"> 
     <item>Malaysia</item> 
     <item>United States</item> 
     <item>Indonesia</item> 
     <item>France</item> 
     <item>Italy</item> 
     <item>Singapore</item> 
     <item>New Zealand</item> 
     <item>India</item> 
    </string-array> 

</resources> 

文件:RES /布局/ main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <Spinner 
     android:id="@+id/spinner1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:entries="@array/country_arrays" 
     android:prompt="@string/country_prompt" /> 

    <Spinner 
     android:id="@+id/spinner2" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

    <Button 
     android:id="@+id/btnSubmit" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Submit" /> 

</LinearLayout> 

MyAndroidAppActivity.java。下面

public class MyAndroidAppActivity extends Activity { 

    private Spinner spinner1, spinner2; 
    private Button btnSubmit; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    addItemsOnSpinner2(); 
    addListenerOnButton(); 
    addListenerOnSpinnerItemSelection(); 
    } 

    // add items into spinner dynamically 
    public void addItemsOnSpinner2() { 

    spinner2 = (Spinner) findViewById(R.id.spinner2); 
    List<String> list = new ArrayList<String>(); 
    list.add("list 1"); 
    list.add("list 2"); 
    list.add("list 3"); 
    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, 
     android.R.layout.simple_spinner_item, list); 
    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner2.setAdapter(dataAdapter); 
    } 

    public void addListenerOnSpinnerItemSelection() { 
    spinner1 = (Spinner) findViewById(R.id.spinner1); 
    spinner1.setOnItemSelectedListener(new CustomOnItemSelectedListener()); 
    } 

    // get the selected dropdown list value 
    public void addListenerOnButton() { 

    spinner1 = (Spinner) findViewById(R.id.spinner1); 
    spinner2 = (Spinner) findViewById(R.id.spinner2); 
    btnSubmit = (Button) findViewById(R.id.btnSubmit); 

    btnSubmit.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

     Toast.makeText(MyAndroidAppActivity.this, 
     "OnClickListener : " + 
       "\nSpinner 1 : "+ String.valueOf(spinner1.getSelectedItem()) + 
       "\nSpinner 2 : "+ String.valueOf(spinner2.getSelectedItem()), 
      Toast.LENGTH_SHORT).show(); 
     } 

    }); 
    } 
} 

代码和文件:CustomOnItemSelectedListener.java

import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemSelectedListener; 
import android.widget.Toast; 

public class CustomOnItemSelectedListener implements OnItemSelectedListener { 

    public void onItemSelected(AdapterView<?> parent, View view, int pos,long id) { 
    Toast.makeText(parent.getContext(), 
     "OnItemSelectedListener : " + parent.getItemAtPosition(pos).toString(), 
     Toast.LENGTH_SHORT).show(); 
    } 

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

} 

[参考文献] [Android的纺丝器(下拉列表)示例] 1

实际上成为setOnItemSelectedListener代替setOnItemClickListener。

好运。