Reputation: 6839
I have a fragment which has a few spinners on it, which a user can select some options from, and a button at the bottom. I have the onClick for the button set to get the data from the spinner and then send it to a database with an asyncTask.
The fragment xml looks like this:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/tastePickTitle"
android:text="Select a Taste: "
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:ems="10"
android:textSize="20sp"
android:textStyle = "bold"
android:padding="5dip"
>
</TextView>
<Spinner
android:id="@+id/spinner1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:entries="@array/taste_array"
/>
<View
android:layout_width="fill_parent"
android:layout_height="30dp">
</View>
<TextView
android:id="@+id/ammountPickTitle"
android:text="How much taste: "
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:ems="10"
android:textSize="20sp"
android:textStyle = "bold"
android:padding="5dip"
>
</TextView>
<Spinner
android:id="@+id/spinner2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:entries="@array/ammount_array"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/addTasteButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Add Taste"
android:layout_weight="1"
/>
</LinearLayout>
</LinearLayout>
the fragment code is:
public class AddTastePage extends Fragment {
String beerId = "";
String url = "";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//set layout here
View v = inflater.inflate(R.layout.add_taste_layout, container, false);
setHasOptionsMenu(true);
getActivity().setTitle("Style");
Bundle args = getArguments();
beerId = args.getString("beerIDSent");
//get user information
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
String userName = prefs.getString("userName", null);
final String userID = prefs.getString("userID", null);
//set button on click
//add button onclick fo top beers
Button bt = (Button)v.findViewById(R.id.addTasteButton);
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//todo: send taste tag to server
//get spinner text
Spinner tasteSpinner = (Spinner)v.findViewById(R.id.spinner1);
String tasteText = tasteSpinner.getSelectedItem().toString();
Spinner ammountSpinner = (Spinner) v.findViewById(R.id.spinner2);
String ammountText = ammountSpinner.getSelectedItem().toString();
int ammount = 0;
if(ammountText.equals("A Hint")){
ammount = 1;
}
if(ammountText.equals("Medium")){
ammount = 2;
}
if(ammountText.equals("Strong")){
ammount = 3;
}
//construct url
String url = "myURL";
new UpdateTaste(getActivity()).execute(url);
//todo: send back to taste list fragment, possible launch a save confirmation
Fragment Fragment_three;
FragmentManager man= getFragmentManager();
FragmentTransaction tran = man.beginTransaction();
Fragment_three = new TasteTags2();
final Bundle bundle = new Bundle();
bundle.putString("beerIDSent", beerId);
Fragment_three.setArguments(bundle);
tran.replace(R.id.main, Fragment_three);//tran.
tran.addToBackStack(null);
tran.commit();
}
});
// Inflate the layout for this fragment
return v;
}
}
FC error:
02-14 20:29:59.102 19523-19523/com.beerportfolio.beerportfoliopro E/SpannableStringBuilder﹕ SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
02-14 20:30:21.266 19523-19523/com.beerportfolio.beerportfoliopro E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.NullPointerException
at com.beerportfolio.beerportfoliopro.AddTastePage$1.onClick(AddTastePage.java:55)
at android.view.View.performClick(View.java:4280)
at android.view.View$PerformClick.run(View.java:17984)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:5789)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:843)
at dalvik.system.NativeStart.main(Native Method)
Line 55 in AddTastePage is:
String ammountText = ammountSpinner.getSelectedItem().toString();
Upvotes: 0
Views: 345
Reputation: 3210
You just need to declare the Spinner
above setOnClickListener
try this code :
//add button onclick fo top beers
Button bt = (Button)v.findViewById(R.id.addTasteButton);
final Spinner tasteSpinner = (Spinner)v.findViewById(R.id.spinner1);
final Spinner ammountSpinner = (Spinner) v.findViewById(R.id.spinner2);
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//todo: send taste tag to server
//get spinner text
String tasteText = tasteSpinner.getSelectedItem().toString();
String ammountText = ammountSpinner.getSelectedItem().toString();
Upvotes: 0
Reputation: 73808
you have 2 declarations of v
and they are probably getting mixed up. You have this v
View v = inflater.inflate(R.layout.add_taste_layout, container, false);
and then you have this one which is v
is the button you clicked
@Override
public void onClick(View v)
so that v
will not have your spinner in it causing your spinner to be null because it cannot find it
rename the onClick one to something else, you will also probably have to make the first v
that is your layout final because you are accessing it in the onClick
Upvotes: 1