Android-спиннер меняет положение элемента после выбора

1

Привет, у меня возникла проблема с spinner, после выбора элемента позиция элементов в списке изменилась, вот мой код: private static class ServerListItemAdapter расширяет BaseAdapter {

    private ArrayList<ServerData> serverList;

    private LayoutInflater mInflater;


    public ServerListItemAdapter(Context context,ArrayList<ServerData> _serverList) {
         mInflater = LayoutInflater.from(context);
         serverList=_serverList;
     }

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

    @Override
    public Object getItem(int pos) {
        return serverList.get(pos);
    }

    @Override
    public long getItemId(int pos) {
        return serverList.get(pos).hashCode();
    }

    private void printServerList(){
        Log.d(TAG, "PRINT - start");
        int pos=0;
        for(ServerData server:serverList){
            Log.d(TAG, pos+":"+server.serverName);
            pos++;
        }
        Log.d(TAG, "PRINT - end");
    }
    @Override
     public View getView(int position, View convertView, ViewGroup parent) {
        Log.d(TAG, "getView -start- pos:"+position);
        printServerList();
         final ViewHolder holder;
         if (convertView == null) {
             convertView = mInflater.inflate(R.layout.select_server_list_item, null);
             holder = new ViewHolder();

             holder.server=serverList.get(position);
             Log.d(TAG,"Pos:"+position+", server:"+holder.server.serverName);


             holder.txtServerName=(TextView)convertView.findViewById(R.id.txt_server_name);
             Log.d(TAG, "Set text for position "+ position+ ": "+ holder.server.serverName);
             holder.txtServerName.setText(serverList.get(position).serverName);

             convertView.setTag(holder);
         } else {
             holder = (ViewHolder) convertView.getTag();
         }
         Log.d(TAG, "getView -end- pos:"+position);
         return convertView;
     }

     static class ViewHolder {
         TextView txtServerName;

         ServerData server;
     }



}


private class ServerData{
    public String serverName="";
    public String serverURL="";

    public ServerData(String _serverName,String _serverURL){
        serverName=_serverName;
        serverURL=_serverURL;
    }
}

Если я начинаю с списка, например {A, B, C}, и я выбираю A, список стал {A, B, A}, но в коде, как вы можете видеть, нет инструкции, которая запрашивает андроид поэтому.

Спасибо

  • 0
    Я видел, что он помещает первый элемент списка в позицию, которую я выбрал, поэтому, если список - List {elem_a, elem_b, elem_c}, строки, отображаемые внутри счетчика после выбора второго элемента, будут be: {elem_a, elem_a, elem_c}, очевидно, только если я выберу первый элемент, все будет нормально :-D
Теги:

1 ответ

-2

Возьмите руководство по следующему коду:

SharedPreferences prefPos = MainMenuActivityOld.this.getSharedPreferences("SITE_N_BOREHOLE_POSITION", 0);
CheckReply.selectedSitePosition = temp = prefPos.getInt("SitePos",CheckReply.selectedSitePosition);

Spinner s1 = (Spinner) findViewById(R.id.spinnerSiteList);

ArrayAdapter <CharSequence> adapter =  new ArrayAdapter <CharSequence> (this, android.R.layout.simple_spinner_item );
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
for(int i = 0; i<CheckReply.siteSelectedAdapter.getCount(); i++){
  // for highlighting the last selected site in spinner
if(i==0)
{
adapter.add((CharSequence) (CheckReply.siteSelectedAdapter.getItem(CheckReply.selectedSitePosition)));
}
else{
if(i == (CheckReply.selectedSitePosition))
{
adapter.add((CharSequence) CheckReply.siteSelectedAdapter.getItem(0));
}
else
{
adapter.add((CharSequence) CheckReply.siteSelectedAdapter.getItem(i));
}
}
}
s1.setAdapter(adapter);
s1.setOnItemSelectedListener(new OnItemSelectedListener() {             
public void onItemSelected(AdapterView<?> parent, View view,int position, long id) {
int newPosition = 0;
if(position == 0){
newPosition = temp;                         
}
else {
if(position == temp){
newPosition = 0;
}
else
{
newPosition =position;
}
}
CheckReply.selectedSitePosition = newPosition;

SharedPreferences.Editor prefSiteNBoreHolePosSet = MainMenuActivityOld.this.getSharedPreferences("SITE_N_BOREHOLE_POSITION", 0).edit();
prefSiteNBoreHolePosSet.putInt("SitePos",  CheckReply.selectedSitePosition);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню