Search code examples
spinnerjasonette

Spinner in Jasonette


I can`t find the Spinner in the Jsonette component list. Is there any replacement to allow the user to choose an item from the list? or should I develop the component as explained in the Jaonette documentation?


Solution

  • I could not find a spinner so have written my own (very primitive). Below is the code:

        public class JasonSpinnerComponent {
        public static View build(View view, final JSONObject component, final JSONObject parent, final Context context) {
            if(view == null) {
                return new Spinner(context);
            } else {
                try {
                    String data = component.getString("data");
                    final String[] spinnerData = data.split("\\|");
                    view = JasonComponent.build(view, component, parent, context);
    
                    JSONObject style = JasonHelper.style(component, context);
                    String type = component.getString("type");
                    ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>
                            (context, android.R.layout.simple_spinner_item,
                                    spinnerData);
                    spinnerArrayAdapter.setDropDownViewResource(android.R.layout
                            .simple_spinner_dropdown_item);
                    ((Spinner)view).setAdapter(spinnerArrayAdapter);
    
                    ((Spinner)view).setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                        @Override
                        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                            try {
                                ((JasonViewActivity) context).model.var.put(component.getString("name"), spinnerData[position]);
                            } catch (JSONException e) {
                                Log.e("Warning", e.getStackTrace()[0].getMethodName() + " : " + e.toString());
                            }
                        }
    
                        @Override
                        public void onNothingSelected(AdapterView<?> parent) {
    
                        }
                    });
    
                    ((Spinner)view).requestLayout();
                    return view;
                } catch (Exception e){
                    Log.d("Warning", e.getStackTrace()[0].getMethodName() + " : " + e.toString());
                    return new View(context);
                }
            }
        }
    }
    

    This works for a jasonette like this:

    {
       "type": "spinner",
       "name": "gender",
       "data": "Male|Female"
    }
    

    Let me repeat, this is very primitive and will undergo a lot of changes in future. But this can be a good starting point for someone looking for a spinner. I will be glad if it helped you.