0

My Spinner Not Selected after populated data, i tried some fixes from stack overflow but non of them works.

my Complete code to Spinner please find the issue any found in here thanks.............

the spinner code below worked inside with Asyntask onPost excute method but in the Register Activity not works.

    package com.tutorials.hp.Tiktokads;

import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Adapter;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ExpandableListView;
import android.widget.Spinner;

import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonArrayRequest;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.tutorials.hp.Tiktokads.m_DataObject.*;
import com.tutorials.hp.Tiktokads.m_DataObject.City;
import com.tutorials.hp.Tiktokads.m_MySQL.SpinCityDataDownload;
import com.tutorials.hp.Tiktokads.m_MySQL.SpinDownloader;
import com.tutorials.hp.Tiktokads.m_UI.AsyncResponse;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;

public class RegisterActivity extends AppCompatActivity  { //implements AsyncResponse{
    final static String urlAddress="projects/birthdays/android/getAllDistrict";
    ArrayList<Province> ProvinceList = new ArrayList<>();
    ArrayList<City> CityList = new ArrayList<>();
    private Spinner sp;
    private Spinner sp1;
    private static final String TAG = "Naseemlog";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        sp= (Spinner) findViewById(R.id.sp);
        sp1= (Spinner) findViewById(R.id.sp1);
        sp1.setEnabled(false);

        getData();
       // new SpinDownloader(RegisterActivity.this,urlAddress,sp,sp1,RegisterActivity.this).execute();


        //Log.i(TAG, String.valueOf(result));

        ArrayAdapter adapter=new ArrayAdapter(RegisterActivity.this,android.R.layout.simple_spinner_dropdown_item,ProvinceList);
        sp.setAdapter(adapter);

        sp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

                Log.i(TAG, "sdasd");

                //Toast.makeText(c,Provinces.get(position),Toast.LENGTH_SHORT).show();
                Province province = (Province) parent.getSelectedItem();
                //Toast.makeText(c, "Province ID: "+province.getId()+",  Province Name : "+province.getName(), Toast.LENGTH_SHORT).show();

//                    Message message = new Message();
//                    Bundle bundle = new Bundle();
//                    bundle.putString("District", province.getId());
//                    message.setData(bundle);
//                    handler.sendMessage(message); // pass handler object from activity

                String district=province.getId();

                String urlAddress1="projects/birthdays/android/getAllCityByDistrict/"+province.getId();
               Log.i(TAG, urlAddress1);
                //new SpinCityDataDownload(c,urlAddress1,sp,sp1,mCallback).execute();

                getCityData(urlAddress1);

//                sp1.setEnabled(true);
//                //BIND
//                ArrayAdapter adapter1=new ArrayAdapter(RegisterActivity.this,android.R.layout.simple_spinner_dropdown_item,CityList);
//                sp1.setAdapter(adapter1);
//
//                sp1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
//                    @Override
//                    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
//                        //Toast.makeText(c,Provinces.get(position),Toast.LENGTH_SHORT).show();
//                        City city = (City) parent.getSelectedItem();
//                        //Toast.makeText(c, "city ID: "+city.getId()+",  city Name : "+city.getName(), Toast.LENGTH_SHORT).show();
////                    Intent intent = new Intent("locationSelection");
////                    intent.putExtra("city",city.getId());
////                    c.sendBroadcast(intent);
//
//                        String cityId=city.getId();
//
//                    }
//
//                    @Override
//                    public void onNothingSelected(AdapterView<?> parent) {
//
//                    }
//                });
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }


        });

    }


    private void getData(){
        // Instantiate the RequestQueue.
        RequestQueue queue = Volley.newRequestQueue(this);

        // Request a string response from the provided URL.
        JsonArrayRequest req = new JsonArrayRequest(urlAddress,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {


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

                                JSONObject result = (JSONObject) response
                                        .get(i);

                                int id = result.getInt("id");
                                String name = result.getString("pro_name");
                                ProvinceList.add(new Province(String.valueOf(id), name));

                            }

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                        //Log.i(TAG, String.valueOf(response));
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.i(TAG, "Volley Error");
            }
        });
        // Add the request to the RequestQueue.
        queue.add(req);

    }

    private void getCityData(String urlAddress1){
        // Instantiate the RequestQueue.
        RequestQueue queue = Volley.newRequestQueue(this);

        // Request a string response from the provided URL.
        JsonArrayRequest req = new JsonArrayRequest(urlAddress1,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {


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

                                JSONObject result = (JSONObject) response
                                        .get(i);

                                int id = result.getInt("id");
                                String name = result.getString("city_name");
                                CityList.add(new City(String.valueOf(id), name));

                            }

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                        //Log.i(TAG, String.valueOf(response));
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.i(TAG, "Volley Error");
            }
        });
        // Add the request to the RequestQueue.
        queue.add(req);

    }
Naseem
  • 21
  • 7

2 Answers2

1

I had faced a same issue..what i did is...

i have created a seperate xml layout which contain textview, and i used that xml layout

ArrayAdapter adapter=new ArrayAdapter(RegisterActivity.this,R.layout.custom_drop_down_item,ProvinceList);
            sp.setAdapter(adapter);

            sp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {


                }

                @Override
                public void onNothingSelected(AdapterView<?> parent) {

                }


            });

My problem solved!!

Just try it..may be it will help you...

Machavity
  • 30,841
  • 27
  • 92
  • 100
Naimatullah
  • 3,749
  • 2
  • 13
  • 12
1

Add this code in your RegisterActivity

ArrayList<String> list = new ArrayList<>();
            list.add("one");
            list.add("two");
            CustomDropDownAdapter adapter = new CustomDropDownAdapter(this, list);
            spinner.setAdapter(adapter);
            
            adapter.setOnCustomItemSelectedListener(new CustomDropDownAdapter.OnCustomItemSelectedListener() {
                @Override
                public void onItemSelected(int position, String selectedValue) {
                    // this will hit if any item will be select
                }
            });

Create a seperate class

import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import com.kpsoft.xlez.reform.R;

import java.util.ArrayList;


public class CustomDropDownAdapter extends BaseAdapter {

    private ArrayList<String> mList;
    private Activity mContext;
    private OnCustomItemSelectedListener mListener;

    public CustomDropDownAdapter(Activity context, ArrayList<String> list){
        this.mContext = context;
        this.mList = list;
    }

    public void setOnCustomItemSelectedListener(OnCustomItemSelectedListener listener){
        this.mListener = listener;
    }

    @Override
    public int getCount() {
        return mList == null ? 0 : mList.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = mContext.getLayoutInflater();

        final ViewHolder viewHolder;
        if (convertView == null) {
            viewHolder = new ViewHolder();

            convertView = inflater.inflate(R.layout.item_drop_down, parent, false);
            // well set up the ViewHolder
            viewHolder.mTextView = (TextView) convertView.findViewById(R.id.tv);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }

        viewHolder.mTextView.setText(mList.get(position));

        convertView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(mListener != null){
                    mListener.onItemSelected(position, viewHolder.mTextView.getText().toString());
                }
            }
        });

        return convertView;
    }

    private static class ViewHolder {
        TextView mTextView;
    }

    public interface OnCustomItemSelectedListener{
        void onItemSelected(int position, String selectedValue);
    }
}

This is the layout of item drop down

<TextView
    android:id="@+id/tv"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:textSize="18sp"
    android:textColor="#000000"/>

This is completely working solution...I hope it will help you...

Cheers!! Simplicity is the best!

Naimatullah
  • 3,749
  • 2
  • 13
  • 12