Spinner项目不可见(数据来自服务器)android

时间:2017-07-18 06:24:03

标签: android

这里我将数据保存在数组列表中,即学期列表: -

JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.GET,
            "http://www.mytat.in/API/semester?tokenno=xvub4jey66c7ec6tb4j7g83ghjls353\n", new JSONObject(postParam),
            new Response.Listener<JSONObject>() {


                @Override
                public void onResponse(JSONObject response) {
                    Log.e("response", response.toString());



                    try {

                        JSONArray output = response.getJSONArray("output");
                        Log.e("semester",output.toString());

                        for ( int j =0 ; j<output.length();j++) {

                            JSONObject semester = output.getJSONObject(j);
                            Log.e("semester value", semester.toString());

                            for (int i = 0; i<semester.length();i++){

                                Map<String,String> map = new HashMap<String,String>();
                                Iterator iterator = semester.keys();
                                while (iterator.hasNext()){

                                    String key = (String) iterator.next();
                                    Log.e("key", key);
                                    String value = semester.getString(key);
                                    Log.e("value", value);
                                    if (key .equals("semester")){
                                        semesterlist.add(value);
                                        Log.e("semesterlist",semesterlist.toString());
                                    }

                                }
                                break;


                            }


                        }


                    } catch (JSONException e) {
                        Log.e("responsejson", "Error: " + e.toString());
                    }
                    hidepDialog();

                }
            }, new Response.ErrorListener() 

这是我的适配器

ArrayAdapter<String> studentsem= new ArrayAdapter<String>(getActivity(),android.R.layout.simple_spinner_item,semesterlist);
    studentsem.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinnersemester.setAdapter(studentsem);

    spinnersemester.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view,
                                   int position, long id) {
            Object item = adapterView.getItemAtPosition(position);
            if (item != null) {



            }

        }

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

        }
    });

这是我的布局

    <Spinner
        android:layout_width="match_parent"
        android:layout_height="35dp"
        android:id="@+id/spinner_one"
        android:layout_marginTop="20dp"
        android:background="@color/loginbg">

    </Spinner>

2 个答案:

答案 0 :(得分:0)

尝试将getActivity()更改为getBaseContext()

ArrayAdapter<String> studentsem= new ArrayAdapter<String>(getBaseContext(),android.R.layout.simple_spinner_item,semesterlist);
studentsem.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

我用你的适​​配器尝试它,它工作。

答案 1 :(得分:0)

try this 


public class MainActivity extends AppCompatActivity {

    public Spinner spinner;
    public ArrayList<SpinnerItems> arr_spiner;
    public SpinnerItems  spinnerItem;
    public SpinnerAdapterClass adapter;
    public String sSelectedItem;
    public TextView txtSpinnerValue;
    public static String sTestData ;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        arr_spiner = new ArrayList<SpinnerItems>();
        getData("http://www.mytat.in/API/semester?tokenno=xvub4jey66c7ec6tb4j7g83ghjls353");
        initailazation();
        spinnerItem = new SpinnerItems();
        spinnerItem.setId(null);
        spinnerItem.setName("Select Semester");
        arr_spiner.add(0, spinnerItem);
        adapter =new SpinnerAdapterClass(MainActivity.this ,arr_spiner);
        spinner.setAdapter(adapter);
        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                sSelectedItem = arr_spiner.get(spinner.getSelectedItemPosition())
                        .getName();
                txtSpinnerValue.setText(sSelectedItem);
            }
            @Override
            public void onNothingSelected(AdapterView<?> parent) {
            }
        });
    }
    private void initailazation() {
        spinner=(Spinner)findViewById(R.id.sp_terminal);
        txtSpinnerValue=(TextView)findViewById(R.id.txt_serSpinnerValue);
    }
    public void getData(String s){
        StringRequest stringRequest =new StringRequest(Request.Method.GET, s, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                try {
                    JSONObject jsonObject = new JSONObject(response);
                    JSONArray jsonArray = jsonObject.getJSONArray("output");
                    for(int i=0 ; jsonArray.length()>0; i++){
                        JSONObject data = jsonArray.getJSONObject(i);
                        String semester = data.getString("semester");
                        String id = data.getString("id");
                        spinnerItem = new SpinnerItems();
                        spinnerItem.setId(id);
                        spinnerItem.setName(semester);
                        arr_spiner.add(spinnerItem);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
            }
        });
        RequestQueue requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(stringRequest);
    }}

Main Layout file 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="nfcdemo.equesttect.com.spinnerdemo.MainActivity">

    <Spinner
        android:id="@+id/sp_terminal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true" />

    <TextView
        android:id="@+id/txt_serSpinnerValue"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:gravity="center"
        android:textColor="@color/black" />

</RelativeLayout>

Spinner Item file 

package nfcdemo.equesttect.com.spinnerdemo;

public class SpinnerItems {

    private String id = null;
    private String name = null;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}


Spinner Adapter File

public class SpinnerAdapterClass extends BaseAdapter {

    ArrayList<SpinnerItems> item_list;
    Context mContext;
    ArrayList<String> arrayList_string;
    public SpinnerAdapterClass(Context context,
                               ArrayList<SpinnerItems> item_list) {
        super();
        this.item_list = item_list;
        this.mContext = context;
    }
    @Override
    public int getCount() {
        return item_list.size();
    }
    @Override
    public Object getItem(int position) {
        return item_list.get(position);
    }
    @Override
    public long getItemId(int position) {
        return position;
    }
    private class ViewHolder {
        TextView txt_name;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup container) {
        ViewHolder viewHolder = null;
        if (convertView == null) {
            // if it's not recycled, initialize some attributes
            LayoutInflater mInflater = (LayoutInflater) mContext
                    .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
            convertView = mInflater.inflate(R.layout.list_raw,
                    container, false);
            viewHolder = new ViewHolder();
            viewHolder.txt_name = (TextView) convertView
                    .findViewById(R.id.txt_name);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        viewHolder.txt_name.setText("" + item_list.get(position).getName());
        return convertView;
    }
}

row file 


<?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:gravity="center_vertical"
android:orientation="vertical" >
<TextView
    android:id="@+id/txt_name"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_vertical"
    android:padding="10dp"
    android:textAllCaps="true"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:textColor="@color/black" />
</LinearLayout>



    <uses-permission android:name="android.permission.INTERNET" />

Hope its work