【问题标题】:How to change the position of a spinner according to position of other spinner in two different activities如何根据两个不同活动中其他微调器的位置更改微调器的位置
【发布时间】:2016-12-20 04:08:03
【问题描述】:

我在两个不同的活动中有两个 android 微调器下拉菜单。但是两个微调器都有来自同一个源的相同数据。我想根据第一个活动的位置更改第二个活动的位置。如何解决这个问题?

更新代码:

第一个活动:

public class ServiceRequest extends BaseActivity implements OnItemClickListener {
    private List<Item> customerList = new ArrayList<Item>();
    private SpinnerAdapter adapter;
    public static final String EXTRA_INTENT_CUSTOMER_LIST  ="extra_intent_customer_list";

    public static final String EXTRA_INTENT_SELECTED_ITEM = "extra_intent_selected_item";
    private List<Item> items;
    Spinner spin;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getLayoutInflater().inflate(R.layout.service_request, frameLayout);

       ;


    );
                    System.out.println("Selected item "    Button login = (Button) findViewById(R.id.booking);

        final String message = autoCompView.getText().toString();
        //Create the bundle


        login.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v) {
{

                    if(customerList.isEmpty()) return;
                    Item selectedItem = (Item) spin.getSelectedItem();
                    spin.getSelectedItem().toString(+selectedItem);

              Intent intent = new Intent(ServiceRequest.this, Form.class);
//            intent.putExtra(EXTRA_INTENT_CUSTOMER_LIST, (Serializable) customerList);
                    intent.putExtra("seletedItem", selectedItem);
                    intent.putExtra(EXTRA_INTENT_SELECTED_ITEM, selectedItem);
                    startActivity(intent);
                }
            }

        });

        spin = (Spinner) findViewById(R.id.service_spinner);
        adapter = new SpinnerAdapter((ArrayList<Item>) customerList, this);
        spin.setAdapter(adapter);
    }


    public void onStart(){
        super.onStart();
        BackTask bt=new BackTask();
        bt.execute();
    }
    private class BackTask extends AsyncTask<Void,Void,ArrayList<Item>> {
        ArrayList<String> list;
        protected void onPreExecute(){
            super.onPreExecute();
            list=new ArrayList<>();
        }
        protected ArrayList<Item> doInBackground(Void... params) {
            InputStream is = null;
            String result = "";
            try {
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost("http://my_url/Service.asmx/GetServiceList");
                HttpResponse response = httpclient.execute(httppost);
                HttpEntity entity = response.getEntity();
                // Get our response as a String.
                is = entity.getContent();
            } catch (IOException e) {
                e.printStackTrace();
            }

            //convert response to string
            try {
                BufferedReader reader = new BufferedReader(new InputStreamReader(is, "utf-8"));
                String line = null;
                while ((line = reader.readLine()) != null) {
                    result += line;
                }
                is.close();
                //result=sb.toString();
            } catch (Exception e) {
                e.printStackTrace();
            }
            // parse json data
            try {
                JSONArray jArray = new JSONArray(result);
                for (int i = 0; i < jArray.length(); i++) {
                    JSONObject obj = jArray.getJSONObject(i);
                    Item customer = new Item();
                    customer.setId(obj.getString("ServiceId"));
                    customer.setName(obj.getString("ServiceName"));

                    // adding movie to movies array
                    customerList.add(customer);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
//            adapter.notifyDataSetChanged();
            return null;
        }
        @Override
        protected void onPostExecute(ArrayList<Item> customerList) {
            if(customerList != null && !customerList.isEmpty()){
                adapter.updateDate(customerList);
            }
        }

    }}

第二个活动的代码

     public class Form extends BaseActivity {

    //    ArrayList<String> listItems = new ArrayList<>();
//    ArrayAdapter<String> adapter;
    private ArrayList<Item> customerList = new ArrayList<Item>();
    private SpinnerAdapter adapter;
    private List<Item> items;

    AdapterView.OnItemSelectedListener listener;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getLayoutInflater().inflate(R.layout.activity_form, frameLayout);

        if(getIntent().hasExtra(ServiceRequest.EXTRA_INTENT_SELECTED_ITEM)){
            selectedItem = (Item)getIntent().getSerializableExtra(ServiceRequest.EXTRA_INTENT_SELECTED_ITEM);
        }


        service_need = (Spinner) findViewById(R.id.service_need);
        adapter = new SpinnerAdapter(customerList, this);
        service_need.setAdapter(adapter);
       /*  Commented by me
       if(selectedItem != null){
            service_need.setSelection(customerList.indexOf(selectedItem));
        }*/




        /*
        Commented for testing :Praveen
        Bundle bundle = getIntent().getExtras();
        String stuff1 = bundle.getString("local");*/
        autoCompView.setText("stuff1");
//        position = customerList.indexOf(bundle.getString("name"));
//        spin.setSelection(position);
//        adapter.notifyDataSetChanged();
//        adapter.notifyDataSetChanged();

//        String name = bundle.getString("name");
//        adapter.add(name);


    }

    public void onStart() {
        super.onStart();
        BackTask bt = new BackTask();
        bt.execute();
    }

    private class BackTask extends AsyncTask<Void, Void, ArrayList<Item>> {
        ArrayList<String> list;

        protected void onPreExecute() {
            super.onPreExecute();
//            list = new ArrayList<>();

        }

        protected ArrayList<Item> doInBackground(Void... params) {
            InputStream is = null;
            String result = "";
            try {
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost("http://my_url/Service.asmx/GetServiceList");
                HttpResponse response = httpclient.execute(httppost);
                HttpEntity entity = response.getEntity();
                // Get our response as a String.
                is = entity.getContent();
            } catch (IOException e) {
                e.printStackTrace();
            }

            //convert response to string
            try {
                BufferedReader reader = new BufferedReader(new InputStreamReader(is, "utf-8"));
                String line = null;
                while ((line = reader.readLine()) != null) {
                    result += line;
                }
                is.close();
                //result=sb.toString();
            } catch (Exception e) {
                e.printStackTrace();
            }
            // parse json data
            try {
                JSONArray jArray = new JSONArray(result);
                for (int i = 0; i < jArray.length(); i++) {
                    JSONObject obj = jArray.getJSONObject(i);
                    Item customer = new Item();
                    customer.setId(obj.getString("ServiceId"));
                    customer.setName(obj.getString("ServiceName"));
                    customerList.add(customer);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
//            adapter.notifyDataSetChanged();
            return null;
        }

        @Override
        protected void onPostExecute(ArrayList<Item> customerList) {
            if(customerList != null && !customerList.isEmpty()){
                adapter.updateDate(customerList);
                if(selectedItem != null){
                    spin.setSelection(customerList.indexOf(selectedItem));
                }
            }
        }
    }


}

模型类

public class Item implements Serializable {
    String id;
    String name;

    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;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Item item = (Item) o;

        if (getId() != item.getId()) return false;
        return getName().equals(item.getName());

    }
}

适配器类

public class SpinnerAdapter extends BaseAdapter {

    ArrayList<Item> categories = new ArrayList<>();
    Context mContext;

    public SpinnerAdapter(ArrayList<Item> categories, Context context){
        this.categories = categories;
        mContext = context;
    }

    @Override
    public int getCount() {
        return categories.size();
    }

    @Override
    public Object getItem(int i) {
        return categories.get(i);
    }

    @Override
    public long getItemId(int i) {
        return categories.get(i).hashCode();
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {

        Item item = categories.get(i);
        ViewHolder holder = null;
        if(view == null){
            view = LayoutInflater.from(mContext).inflate(R.layout.spin_row, null);
            holder = new ViewHolder();
            holder.name = (TextView) view.findViewById(R.id.name);
            view.setTag(holder);
        } else {
            holder = (ViewHolder) view.getTag();
        }
        holder.name.setText(item.getName());
        return view;
    }

    static class ViewHolder{
        TextView name;
    }

}

JSON 响应

[{"ServiceId":"1","ServiceName":"AC"},
{"ServiceId":"5","ServiceName":"Plumbing"},
{"ServiceId":"3","ServiceName":"Refrigerator"},
{"ServiceId":"7","ServiceName":"Appliances"},
{"ServiceId":"27","ServiceName":"Others"}]

【问题讨论】:

  • 最重要的问题是,您是否在第二个活动中正确获取了您的意图数据?是position你想要的。

标签: android android-intent android-spinner listadapter android-bundle


【解决方案1】:

你可以使用 2 个主题来解决这个问题。

  1. 共享偏好

  2. 意图

分享偏好

存储 Spinner 数组的位置。

再次使用时获取位置并将其设置为 Spinner。

例子:-

用于保存或存储位置到 SharePrefernce。

int position = spin.getSelectedItemPosition() ;
PreferenceManager.getDefaultSharedPreferences(this).edit().putInt("position",position ).commit();

用于从 SharePrefernce 获取或设置 Spinner 的值。

int position = PreferenceManager.getDefaultSharedPreferences(this).getInt("position", 0);
spin.setSelection(position);

意图

将 Spinner 数组的位置存储在 Intent 中。

再次使用 intent 时获取位置并设置为 Spinner。

例子:-

用于将位置保存或存储到 Intent 中。

int position = spin.getSelectedItemPosition() ;
Intent myIntent = new Intent(A.this, B.class);
myIntent.putExtra("position", position);
startActivity(myIntent);

用于从 Intent 获取或设置值到 Spinner。

Intent mIntent = getIntent();
int position = mIntent.getIntExtra("position", 0);
spin.setSelection(position);

这两个都在工作。我已经检查过了。

【讨论】:

  • 在你的代码中设置 spin.setSelection(position); 而不是这个 spin.setSelection(position, false);
  • 请使用setContentView(R.layout.service_request); 而不是getLayoutInflater().inflate(R.layout.service_request, frameLayout);
  • int position = spin.getSelectedItemPosition() ;行有空点异常
  • 使用 setContentView,我的导航抽屉会有一些问题..
【解决方案2】:
private List<Item> customerList = new ArrayList<Item>();

客户列表是数据模型“Item”的列表,一个 pojo 类。

position = customerList.indexOf(bundle.getString("name")); 

在这一行中,您试图通过传递字符串来获取所选项目的索引。 数组列表将无法比较两种不同类型的对象。 您必须传递一个“项目”实例: 位置 = customerList.indexOf(item);

您必须使用类的一些独特属性覆盖 Item 类中的“等于”方法。 此 equals 方法将用于比较两个对象,如果存在于列表中,列表将返回对象的索引。请检查thisthis 以获得澄清。

数据模态类

public class Item implements Serializable {
int id;
String name;

public int getId() {
    return id;
}

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

public String getName() {
    return name;
}

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

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;

    Item item = (Item) o;

    if (getId() != item.getId()) return false;
    return getName().equals(item.getName());

}

}

活动类

 package spinner.sample.spinnerexample;

 import android.content.Intent;
 import android.os.Bundle;
 import android.support.v7.app.AppCompatActivity;
 import android.view.View;
 import android.widget.Spinner;

 import java.util.ArrayList;

 public class MainActivity extends AppCompatActivity {

private Spinner spinner;
ArrayList<Item> customerList = new ArrayList<>();
SpinnerAdapter spinnerAdapter;
public static final String EXTRA_INTENT_CUSTOMER_LIST  ="extra_intent_customer_list";

public static final String EXTRA_INTENT_SELECTED_ITEM = "extra_intent_selected_item";

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    spinner = (Spinner)findViewById(R.id.spinner);
    createList();
    spinnerAdapter = new SpinnerAdapter(customerList, this);
    spinner.setAdapter(spinnerAdapter);
}


private void createList(){

    Item item1 = new Item();
    item1.setId(14);
    item1.setName("Automobile");

    Item item2 = new Item();
    item2.setId(15);
    item2.setName("Business Services");

    Item item3 = new Item();
    item3.setId(16);
    item3.setName("Business");


    Item item4 = new Item();
    item4.setId(17);
    item4.setName("Computers");


    Item item5 = new Item();
    item5.setId(18);
    item5.setName("Computers Acc");

    Item item6 = new Item();
    item6.setId(19);
    item6.setName("Education");

    Item item7 = new Item();
    item7.setId(20);
    item7.setName("Personal");

    customerList.add(item1);
    customerList.add(item2);
    customerList.add(item3);
    customerList.add(item4);
    customerList.add(item5);
    customerList.add(item6);
    customerList.add(item7);

}

public void onClick(View view){
    if(customerList.isEmpty()) return;
    Item selectedItem = (Item) spinner.getSelectedItem();
    System.out.println("Selected item "+selectedItem);

    Intent intent = new Intent(this, SecondActivity.class);
    intent.putExtra(EXTRA_INTENT_CUSTOMER_LIST, customerList);
    intent.putExtra(EXTRA_INTENT_SELECTED_ITEM, selectedItem);
    startActivity(intent);
}

}

活动 2

     package spinner.sample.spinnerexample;

        import android.os.Bundle;
        import android.support.v7.app.AppCompatActivity;
        import android.widget.Spinner;

        import java.util.ArrayList;

        public class SecondActivity extends AppCompatActivity {

        private Spinner spinner;
        ArrayList<Item> customerList = new ArrayList<>();
        SpinnerAdapter spinnerAdapter;
        Item selectedItem;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        if(getIntent().hasExtra(MainActivity.EXTRA_INTENT_CUSTOMER_LIST)){
            customerList = (ArrayList<Item>) getIntent().getSerializableExtra(MainActivity.EXTRA_INTENT_CUSTOMER_LIST);
        }

        if(getIntent().hasExtra(MainActivity.EXTRA_INTENT_SELECTED_ITEM)){
            selectedItem = (Item)getIntent().getSerializableExtra(MainActivity.EXTRA_INTENT_SELECTED_ITEM);
        }


        spinner = (Spinner)findViewById(R.id.spinner);

        if(customerList.isEmpty()) return;
        spinnerAdapter = new SpinnerAdapter(customerList, this);
        spinner.setAdapter(spinnerAdapter);
        if(selectedItem != null){
            spinner.setSelection(customerList.indexOf(selectedItem));
        }
    }
}

Adapter :

        package spinner.sample.spinnerexample;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.util.ArrayList;

/**
 * Created by praveen on 17/8/16.
 */

public class SpinnerAdapter extends BaseAdapter {

    ArrayList<Item> categories = new ArrayList<>();
    Context mContext;

    public SpinnerAdapter(ArrayList<Item> categories, Context context){
        this.categories = categories;
        mContext = context;
    }

    @Override
    public int getCount() {
        return categories.size();
    }

    @Override
    public Object getItem(int i) {
        return categories.get(i);
    }

    @Override
    public long getItemId(int i) {
        return categories.get(i).hashCode();
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {

        Item item = categories.get(i);
        ViewHolder holder = null;
        if(view == null){
            view = LayoutInflater.from(mContext).inflate(R.layout.spinner_item, null);
            holder = new ViewHolder();
            holder.name = (TextView) view.findViewById(R.id.txt_view_spinner_item);
            view.setTag(holder);
        } else {
            holder = (ViewHolder) view.getTag();
        }
        holder.name.setText(item.getName());
        return view;
    }

    static class ViewHolder{
        TextView name;
    }

}

【讨论】:

  • 我给出的硬编码数据仅用于演示目的。
  • 在您的情况下,数据源是服务器,但两个活动中的数据是相同的。您正在解析名为“Item”的模型类中的日期。两个活动中的微调器都有数据源是“项目”列表。您尚未在“项目”类中实现任何比较逻辑。因此行“customerList.indexOf(bundle.getString("name")); 将无法找到项目的位置。您必须覆盖 Item 类中的 equals 方法并添加比较逻辑。并修改您的代码“旋转。 getSelectedItem().toString()" 到 spin.getSelectedItem() 。如果可行,请告诉我
  • 我根据您的建议进行了更改,但这也行不通。第二个活动只是将值作为预定义的顺序返回。
  • 你能分享活动A,第二个活动和项目类的更新可运行代码
  • 您能否分享用于获取数据的网址或将一些虚拟数据放入下拉框并分享网址,以便我可以运行代码并检查
【解决方案3】:

这应该是ServiceRequest活动中的Intent

Intent intent = new Intent(ServiceRequest.this, Form.class);

Bundle extras = new Bundle();
extras.putString("local", autoCompView.getText().toString());
extras.putInt("position", spin.getSelectedItemPosition());
intent.putExtras(extras);

startActivity(intent);

这应该是您在Form 活动的onCreate() 方法中设置Spinner 的方式:

spin = (Spinner) findViewById(R.id.spinner);
adapter = new SpinAdapter(this, customerList);
spin.setAdapter(adapter);

Bundle extras = getIntent().getExtras();
spin.setSelection(extras.getInt("position"));

【讨论】:

  • @Adi 我错了,方法是setSelection(),不是setPosition()。更新了代码。
  • 它也不起作用..两个微调器都填充服务器响应,没有意图值起作用..
【解决方案4】:

我可以找到解决方案。尝试使用此更改您的两个活动代码,

public class MainActivity extends AppCompatActivity{


private ArrayList<Item> customerList = new ArrayList<Item>();
private SpinnerAdapter adapter;
public static final String EXTRA_INTENT_CUSTOMER_LIST  ="extra_intent_customer_list";

public static final String EXTRA_INTENT_SELECTED_ITEM = "extra_intent_selected_item";
private List<Item> items;
Spinner spin;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
   // getLayoutInflater().inflate(R.layout.activity_main, null);

    Button login = (Button) findViewById(R.id.login);
    spin = (Spinner) findViewById(R.id.service_spinner);

    assert login != null;
    login.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v) {

           if (spin.getSelectedItemPosition() == 0) {

               Toast.makeText(MainActivity.this, "Please Select item", Toast.LENGTH_SHORT).show();

            }
            else {

                if(customerList.isEmpty()) return;
                Item selectedItem = (Item) spin.getSelectedItem();
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                intent.putExtra(EXTRA_INTENT_SELECTED_ITEM, spin.getSelectedItemPosition());
                startActivity(intent);
            }
        }

    });

    for (int i = 0; i < 1; i++) {

        Item customer = new Item();
        customer.setId(""+i);
        customer.setName("Select Obj");

        // adding movie to movies array
        customerList.add(customer);
    }

    adapter = new SpinnerAdapter((ArrayList<Item>) customerList, this);
    spin.setAdapter(adapter);


}

public void onStart(){
    super.onStart();
    BackTask bt=new BackTask();
    bt.execute();

}
private class BackTask extends AsyncTask<Void,Void,ArrayList<Item>> {

    protected void onPreExecute(){
        super.onPreExecute();

    }
    protected ArrayList<Item> doInBackground(Void... params) {
        InputStream is = null;
        String result = "";
        try {
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("http://my_url/json");
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            // Get our response as a String.
            is = entity.getContent();
        } catch (IOException e) {
            e.printStackTrace();
        }

        //convert response to string
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(is, "utf-8"));
            String line = null;
            while ((line = reader.readLine()) != null) {
                result += line;
            }
            is.close();
            //result=sb.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        // parse json data
        try {
            JSONArray jArray = new JSONArray(result);
            for (int i = 0; i < jArray.length(); i++) {
                JSONObject obj = jArray.getJSONObject(i);
                Item customer = new Item();
                customer.setId(obj.getString("ServiceId"));
                customer.setName(obj.getString("ServiceName"));

                // adding movie to movies array
                customerList.add(customer);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return customerList;
    }
    @Override
    protected void onPostExecute(ArrayList<Item> customerList) {
        if(customerList != null && !customerList.isEmpty()){
           // adapter.updateDate(customerList);
            adapter.notifyDataSetChanged();
        }
    }

}}

还有SecondActivity:

public class SecondActivity extends AppCompatActivity {

private static final String REGISTER_URL = "http://my_url/Service.asmx/GenerateTicket";

public static final String PREFS_NAME = "MyPrefsFile";

public static final String CUSTOMERID = "customerId";
public static final String USERNAME = "name";
public static final String HOUSENO = "houseNo";
public static final String LOCALITY = "areaName";
public static final String SERVICE = "serviceId";
public static final String MOBILE = "mobile";
public static final String EMAIL = "email";
public static final String PROBLEM = "jobBrief";
private ProgressDialog pDialog;
Spinner spin;
String service;
Item selectedItem;
// flag for Internet connection status
Boolean isInternetPresent = false;

private ArrayList<Item> customerList = new ArrayList<Item>();
private SpinnerAdapter adapter;
private List<Item> items;

AdapterView.OnItemSelectedListener listener;

Spinner service_need;
AutoCompleteTextView autoCompView;
String obj;
int pos;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);
    //getLayoutInflater().inflate(R.layout.activity_second, null);

    if(getIntent().hasExtra(MainActivity.EXTRA_INTENT_SELECTED_ITEM)){
        pos = getIntent().getIntExtra(MainActivity.EXTRA_INTENT_SELECTED_ITEM,0);

    }

    service_need = (Spinner) findViewById(R.id.service_need);

    for (int i = 0; i < 1; i++) {

        Item customer = new Item();
        customer.setId(""+i);
        customer.setName("Select Obj");

        // adding movie to movies array
        customerList.add(customer);
    }


    adapter = new SpinnerAdapter(customerList, this);

    service_need.setAdapter(adapter);

}

public void onStart() {
    super.onStart();
    BackTask bt = new BackTask();
    bt.execute();
}

private class BackTask extends AsyncTask<Void, Void, ArrayList<Item>> {
    ArrayList<String> list;

    protected void onPreExecute() {
        super.onPreExecute();


    }

    protected ArrayList<Item> doInBackground(Void... params) {
        InputStream is = null;
        String result = "";
        try {
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("http://my_url/json");
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            // Get our response as a String.
            is = entity.getContent();
        } catch (IOException e) {
            e.printStackTrace();
        }

        //convert response to string
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(is, "utf-8"));
            String line = null;
            while ((line = reader.readLine()) != null) {
                result += line;
            }
            is.close();
            //result=sb.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        // parse json data
        try {
            JSONArray jArray = new JSONArray(result);
            for (int i = 0; i < jArray.length(); i++) {
                JSONObject obj = jArray.getJSONObject(i);
                Item customer = new Item();
                customer.setId(obj.getString("ServiceId"));
                customer.setName(obj.getString("ServiceName"));
                customerList.add(customer);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return customerList;
    }

    @Override
    protected void onPostExecute(ArrayList<Item> customerList) {
        if(customerList != null && !customerList.isEmpty()){

            service_need.setSelection(pos);

        }

    }
}}

问题 1:由于 null 对象微调器导致 SecondActivity 中出现 NullPointerException。第二个活动中的 Spinner Id 是 Service_need。

Issue2:SecondActivity中的Back_task DoInBackground方法返回null,它必须返回ArrayList才能在OnPostExecute中验证。

谢谢。

希望对您有所帮助!

【讨论】:

  • 它不起作用兄弟.....仍然没有根据第一个改变第二个微调器的位置..
  • 你能更新一下你现在遇到的错误吗?我用你的代码检查了它的工作是否完美。 @阿迪
【解决方案5】:

尝试通过第二个活动中的List 获取所选名称在第一个活动中的位置。

position = customerList.indexOf(bundle.getString("name"));
spin.setSelection(position,false);

【讨论】:

  • 你如何在第二个活动中填充列表?
  • 它直接从服务器填充...就像第一个活动一样
【解决方案6】:

使用setSelection(position) 代替setSelection(position, false)

【讨论】:

    【解决方案7】:

    获取第一个微调器位置并通过意图传递另一个活动并将第一个微调器位置设置为第二个微调器。 (第二个微调器必须是自定义的,例如使用编辑文本的微调器充气)。

    【讨论】:

      【解决方案8】:

      假设您的position 是正确的,但您可以使用简单的Log.d(tag, "pos:"+position) 进行验证,并且您的微调器已正确填充customerList(您可以直观地验证Log.d(tag, "size:"+adapter.getCount())spin.getCount()

      尝试两件事(或两者):

      1. 您的adapter.notifyDataSetChanged() 应该紧跟在customerList.addAll(position,customerList) 之后。如果您在此之前执行setSelection,那么您的微调器仍然是空的。

      2. 您的微调器 ui 还没有准备好的可能性很小,所以这样做:

        spin.post(new Runnable() {
            @Override
            public void run() {
                spin.setSelection(position);
            }
        });
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-21
        • 1970-01-01
        • 2016-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-04
        相关资源
        最近更新 更多