OnItemSelectedListener不断更改为适配器视图

时间:2015-11-06 09:15:26

标签: android spinner onclicklistener

我想创建一个从数据库中检索数据的微调器,但OnItemSelectedListener不起作用。它一直建议使用adapterview.OnclickListener,但编码需要OnClickListenerOnly。

package com.example.win7.fyp;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.Settings;
import android.support.v7.app.ActionBarActivity;

import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.List;

public class student_register extends Activity implements  OnItemSelectedListener {
Toolbar toolbar;

private ProgressDialog progressDialog;

JsonParser jParser = new JsonParser();
private static String URL_TO_PASS = "http://arcafyp.xyz/chat/register_student.php";

SharedPreferences pref;

EditText username5, password5 ,advisorName5;
TextView advReg;

String username1;

String AndroidId;

private ArrayList<Category> categoriesList;
ProgressDialog pDialog;
private Spinner spinnerFood;


// Url to get all categories
private String URL_CATEGORIES = "http://ekinidris.site40.net/chat/advisorName.php";



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_student_register);
    pref = getApplicationContext().getSharedPreferences("MyPref", 0);//  0 - for private mode



  username5 = (EditText)findViewById(R.id.register_matrixno);
  password5 = (EditText) findViewById(R.id.register_ic);
    advisorName5 = (EditText) findViewById(R.id.advName);


    spinnerFood.setOnItemSelectedListener(this);
     spinnerFood = (Spinner) findViewById(R.id.spinFood);


    categoriesList = new ArrayList<Category>();

    // Add new category click event


    new GetCategories().execute();
}





private class GetCategories extends AsyncTask<Void, Void, Void> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(student_register.this);
        pDialog.setMessage("Fetching advisor name..");
        pDialog.setCancelable(false);
        pDialog.show();

    }

    @Override
    protected Void doInBackground(Void... arg0) {
        ServiceHandler jsonParser = new ServiceHandler();
        String json = jsonParser.makeServiceCall(URL_CATEGORIES, ServiceHandler.GET);

        Log.e("Response: ", "> " + json);

        if (json != null) {
            try {
                JSONObject jsonObj = new JSONObject(json);
                if (jsonObj != null) {
                    JSONArray categories = jsonObj
                            .getJSONArray("categories");

                    for (int i = 0; i < categories.length(); i++) {
                        JSONObject catObj = (JSONObject) categories.get(i);
                        Category cat = new Category(catObj.getInt("phone_id"),
                                catObj.getString("name"));
                        categoriesList.add(cat);
                    }
                }

            } catch (JSONException e) {
                e.printStackTrace();
            }

        } else {
            Log.e("JSON Data", "Didn't receive any data from server!");
        }

        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        if (pDialog.isShowing())
            pDialog.dismiss();
        //populateSpinner();
    }

}

/**
 * Adding spinner data
 * */
private void populateSpinner() {
    List<String> lables = new ArrayList<String>();

    advisorName5.setText("");

    for (int i = 0; i < categoriesList.size(); i++) {
        lables.add(categoriesList.get(i).getName());
    }

    // Creating adapter for spinner
    ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_spinner_item, lables);

    // Drop down layout style - list view with radio button
    spinnerAdapter
            .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    // attaching data adapter to spinner
    spinnerFood.setAdapter(spinnerAdapter);
}









@Override
public boolean onCreateOptionsMenu(Menu menu) {
     //Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_student_register, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();

    if (id == R.id.register_send) {
        new registerUser().execute();
        String newCategory =  advisorName5.getText().toString();

        return true;
    }

    return super.onOptionsItemSelected(item);
}





class registerUser extends AsyncTask<String, String, String> {
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        Intent i = getIntent();
        String studentPhone_id = i.getStringExtra("phone_id").toString();
        String studentUsername = username5.getText().toString();
        progressDialog = new ProgressDialog(student_register.this);
        progressDialog.setMessage("Processing Data" + studentPhone_id + studentUsername);
        progressDialog.setIndeterminate(false);
        progressDialog.setCancelable(true);
        progressDialog.show();
    }

    @Override
    protected String doInBackground(String... strings) {
        String studentUsername = username5.getText().toString(); // matrix no
        String studentPassword = password5.getText().toString();  //cgpa
        String studentAdvName = advisorName5.getText().toString();  //advisor name


        Intent i = getIntent();
        String studentPhone_id = i.getStringExtra("phone_id").toString();



        List<NameValuePair> param = new ArrayList<NameValuePair>();
        param.add(new BasicNameValuePair("username",studentUsername));
        param.add(new BasicNameValuePair("phone_id",studentPhone_id));
        param.add(new BasicNameValuePair("password", studentPassword));
        param.add(new BasicNameValuePair("advisorName", studentAdvName));

        JSONObject json = jParser.makeHttpRequest("http://ekinidris.site40.net/chat/register_student.php","POST",param);



        SharedPreferences.Editor editor = pref.edit();

        Log.d("data", json.toString());

        try {
            int result = json.getInt("success");
            if(result == 1) {

                editor.putString("phone_id",studentPhone_id);
                editor.commit();

                Intent intent = new Intent(student_register.this, MainActivity.class);
                intent.putExtra("phone_id", studentPhone_id);
                intent.putExtra("username",studentUsername);
                intent.putExtra("advisorName",studentAdvName);

                startActivity(intent);

                finish();
                progressDialog.dismiss();
            }else{
               To be edited.....
                 put some action refreshing the page
            }

        }catch (JSONException e){
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        progressDialog.dismiss();
        finish();
    }
}

}

logcat的

11-06 16:43:02.289  22071-22071/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity     ComponentInfo{com.example.win7.fyp/com.example.win7.fyp.student_register}: java.lang.ClassCastException: com.example.win7.fyp.student_register cannot be cast to android.view.View$OnClickListener
        at  android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1968)
        at  android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1993)
            at android.app.ActivityThread.access$600(ActivityThread.java:127)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1159)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:4507)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)
        at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.ClassCastException: com.example.win7.fyp.student_register cannot be cast to android.view.View$OnClickListener
        at com.example.win7.fyp.student_register.onCreate(student_register.java:78)
        at android.app.Activity.performCreate(Activity.java:4465)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1932)

2 个答案:

答案 0 :(得分:0)

遵循此代码 -

spinner1.setOnItemSelectedListener(new OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {
            // TODO Auto-generated method stub
            String msupplier=supplier.getSelectedItem().toString();

            Log.e("Selected item : ",msupplier);
}

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

        }
    });

答案 1 :(得分:0)

我使用了sud回答的相同内容,但进行了少许修改却有效

spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view,
                                   int pos, long id) {
        // TODO Auto-generated method stub
       // String msupplier=supplier.getSelectedItem().toString(); instead used below
        Log.e("Selected item : ", (String) parent.getItemAtPosition(pos));
     }

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

    }
});