2014-10-07 78 views
0

我有一个ArrayAdapter调用SpinnerAdapter,因为它的布局需要android.R.layout.simple_spinner_item。由于要显示的数据也需要ContactInfo对象的ArrayList改变项目选择后Android中单个微调项目的背景颜色

然后我有一个Spinner叫做selectionWheel并且当做出“选择”时;它会从之前提到的ArrayList中提取ContactInfo对象,并将其添加到新的ArrayList

现在,当我第二次调出Spinner;我想检查两个ArrayLists之间的匹配项,如果有匹配项,通过更改它们的背景颜色来突出显示Spinner中的相应项目。

以下是我已经尝试:

final Dialog dialog = new Dialog(getActivity()); 
      dialog.setContentView(R.layout.generic_selection_wheel); 
      dialog.setTitle("Select a contact"); 
      final ArrayAdapter<ContactInfo> contactSelectionAdapter = new ArrayAdapter<ContactInfo>(
        getActivity().getBaseContext(), 
        android.R.layout.simple_spinner_item, globaldata 
          .getContactInfoList()); 

      contactSelectionAdapter 
        .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

      Button dialogButtonOK = (Button) dialog 
        .findViewById(R.id.dialogButtonOK); 
      final Spinner selectionWheel = (Spinner) dialog 
        .findViewById(R.id.genericselectionspinner); 

      selectionWheel.setAdapter(contactSelectionAdapter); 

      selectionWheel 
        .setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 

         @Override 
         public void onItemSelected(AdapterView<?> parent, 
           View view, int position, long id) { 
          // check to see if the contact has already been 
          // selected, if not add it. If it has do 
          // nothing. 
          View viewToChange = contactSelectionAdapter 
            .getView(position, new View(
              getActivity() 
                .getBaseContext()), 
              parent); 
          if (!activeContactsArrayList 
            .contains(globaldata 
              .getContactInfoList().get(
                position))) { 
           activeContactsArrayList 
             .add(globaldata 
               .getContactInfoList().get(
                 position)); 
           viewToChange.setBackgroundColor(Color.GREEN);; 

          } else if (activeContactsArrayList 
            .contains(globaldata 
              .getContactInfoList().get(
                position))) { 
           activeContactsArrayList.remove(position); 
           viewToChange.setBackgroundColor(Color.WHITE);; 
          } 
          selectContactsBtn 
            .setText(activeContactsArrayList.size() 
              + " contacts selected"); 
         } 

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

         } 

        }); 

      // if button is clicked, close the custom dialog 
      dialogButtonOK.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 

        dialog.dismiss(); 
       } 
      }); 

      dialog.show(); 
     } 
    }); 

然而,这并不做其中我描述了预期的效果,而且我不确定哪里去从这里...

回答

0

这里是我所做的

package com.example.click; 

import java.util.ArrayList; 

import android.app.Activity; 
import android.content.Context; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemSelectedListener; 
import android.widget.ArrayAdapter; 
import android.widget.Spinner; 
import android.widget.TextView; 

public class MainActivity extends Activity{ 
    Spinner mySpinner; 
    ArrayList<String> check = new ArrayList<String>(); 
    String[] myArray={"1","2","3","4","5"}; 
    String[] newArray={}; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mySpinner = (Spinner)findViewById(R.id.spinner1); 

     mySpinner.setAdapter(new MyAdapter(this,android.R.layout.simple_spinner_item, myArray)); 

     mySpinner.setOnItemSelectedListener(new OnItemSelectedListener() { 

      @Override 
      public void onItemSelected(AdapterView<?> arg0, View arg1, 
        int arg2, long arg3) { 
       // TODO Auto-generated method stub 
       if(check.contains(myArray[arg2])){ 
        check.remove(myArray[arg2]); 
       } 
       else{ 
        check.add(myArray[arg2]); 
       } 
      } 

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

      } 
     }); 
    } 

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


    public class MyAdapter extends ArrayAdapter<String>{ 

     public MyAdapter(Context context, int textViewResourceId, 
       String[] objects) { 
      super(context, textViewResourceId, objects); 
      // TODO Auto-generated constructor stub 
     } 

     @Override 
     public View getDropDownView(int position, View cnvtView, ViewGroup prnt){ 
      LayoutInflater inflater = getLayoutInflater(); 
      View spinnerItem = inflater.inflate(android.R.layout.simple_spinner_item, null); 

      TextView mytext= (TextView)spinnerItem.findViewById(android.R.id.text1); 
      mytext.setText(myArray[position]); 

      if(check.contains(myArray[position])){ 
       spinnerItem.setBackgroundColor(Color.GREEN); 
      } 

      return spinnerItem; 
     } 

    } 


} 
相关问题