2016-05-30 16 views
1

Ich bin neu in Android und ich habe versucht, den ganzen Tag Spinner mit mehreren Auswahlen aus dem unten stehenden Code (akzeptierte Antwort auf diese Frage Android Spinner with multiple choiceAndroid Spinner mit Mehrfachauswahl

das Problem anzuwenden ist, ich nicht das passieren kann Hörer aus der Haupttätigkeit auf die Spinner Java-Datei von der folgenden Zeile:.?

multiSpinner.setItems(MultiSpinnerList, modifiedcoresitestring, this); 

das Argument (das) nicht akzeptabel ist, habe ich auch ohne Erfolg versucht MainActivity.this, was das Problem hier ist

die Set-Methode im Spinner Code sollte empfangen (Listener), aber ich weiß nicht, was es ist und wie man es sendet.

die Spinner Java-Code:

public class MultiSpinner extends Spinner implements 
    DialogInterface.OnMultiChoiceClickListener, DialogInterface.OnCancelListener { 

private List<String> items; 
private boolean[] selected; 
private String defaultText; 
private MultiSpinnerListener listener; 

public MultiSpinner(Context context) { 
    super(context); 
} 

public MultiSpinner(Context arg0, AttributeSet arg1) { 
    super(arg0, arg1); 
} 

public MultiSpinner(Context arg0, AttributeSet arg1, int arg2) { 
    super(arg0, arg1, arg2); 
} 

@Override 
public void onClick(DialogInterface dialog, int which, boolean isChecked) { 
    if (isChecked) 
     selected[which] = true; 
    else 
     selected[which] = false; 
} 

@Override 
public void onCancel(DialogInterface dialog) { 
    // refresh text on spinner 
    StringBuffer spinnerBuffer = new StringBuffer(); 
    boolean someUnselected = false; 
    for (int i = 0; i < items.size(); i++) { 
     if (selected[i] == true) { 
      spinnerBuffer.append(items.get(i)); 
      spinnerBuffer.append(", "); 
     } else { 
      someUnselected = true; 
     } 
    } 
    String spinnerText; 
    if (someUnselected) { 
     spinnerText = spinnerBuffer.toString(); 
     if (spinnerText.length() > 2) 
      spinnerText = spinnerText.substring(0, spinnerText.length() - 2); 
    } else { 
     spinnerText = defaultText; 
    } 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getContext(), 
      android.R.layout.simple_spinner_item, 
      new String[] { spinnerText }); 
    setAdapter(adapter); 
    listener.onItemsSelected(selected); 
} 

@Override 
public boolean performClick() { 
    AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); 
    builder.setMultiChoiceItems(
      items.toArray(new CharSequence[items.size()]), selected, this); 
    builder.setPositiveButton(android.R.string.ok, 
      new DialogInterface.OnClickListener() { 

       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        dialog.cancel(); 
       } 
      }); 
    builder.setOnCancelListener(this); 
    builder.show(); 
    return true; 
} 

public void setItems(List<String> items, String allText, 
        MultiSpinnerListener listener) { 
    this.items = items; 
    this.defaultText = allText; 
    this.listener = listener; 

    // all selected by default 
    selected = new boolean[items.size()]; 
    for (int i = 0; i < selected.length; i++) 
     selected[i] = true; 

    // all text on the spinner 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getContext(), 
      android.R.layout.simple_spinner_item, new String[] { allText }); 
    setAdapter(adapter); 
} 

public interface MultiSpinnerListener { 
    public void onItemsSelected(boolean[] selected); 
} 
} 

Code Tätigkeit:

public class DCOReader extends AppCompatActivity { 

private Toolbar Toolbar; 
private TextView StateText; 
private TextView StateTextDesc; 
private Button ReaderGo; 
private List<String> DCOID = new ArrayList<>(); 
private List<String> ActivityDate = new ArrayList<>(); 
private List<String> CoreSite = new ArrayList<>(); 
private List<String> Snags = new ArrayList<>(); 
private List<String> SnagDesc = new ArrayList<>(); 
private List<String> Layout = new ArrayList<>(); 
private List<String> LayoutDesc = new ArrayList<>(); 
private List<String> Mapping = new ArrayList<>(); 
private List<String> MappingDesc = new ArrayList<>(); 
private List<String> MailSubject = new ArrayList<>(); 
private List<String> MDCOID = new ArrayList<>(); 
private List<String> MActivityDate = new ArrayList<>(); 
private List<String> MCoreSite = new ArrayList<>(); 
private List<String> MSnags = new ArrayList<>(); 
private List<String> MSnagDesc = new ArrayList<>(); 
private List<String> MLayout = new ArrayList<>(); 
private List<String> MLayoutDesc = new ArrayList<>(); 
private List<String> MMapping = new ArrayList<>(); 
private List<String> MMappingDesc = new ArrayList<>(); 
private List<String> MMailSubject = new ArrayList<>(); 
private List<String> ModifiedCoreSiteValues = new ArrayList<>(); 
private List<String> MultiSpinnerList = new ArrayList<>(); 
private String ReaderSelectedItem, CoreSitesString, modifiedcoresitestring; 
private TableLayout Table; 
String[] CoreSiteStringArray; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_dcoreader); 

    Toolbar = (Toolbar) findViewById(R.id.DCOReadertoolbar); 
    StateText = (TextView) findViewById(R.id.ReaderState); 
    StateTextDesc = (TextView) findViewById(R.id.ReaderStateDescLabel); 
    Table = (TableLayout) findViewById(R.id.DCOReaderTable); 
    ReaderGo = (Button) findViewById(R.id.ReaderGo); 
    MultiSpinner multiSpinner = (MultiSpinner) findViewById(R.id.multi_spinner); 


    assert Toolbar != null; 
    Toolbar.setLogo(R.drawable.analyzer); 
    setSupportActionBar(Toolbar); 
    getSupportActionBar().setHomeButtonEnabled(true); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 


    Bundle extras = getIntent().getExtras(); 
    if (extras != null) { 

     DCOID = extras.getStringArrayList("DCOID"); 
     ActivityDate = extras.getStringArrayList("ActivityDate"); 
     CoreSite = extras.getStringArrayList("CoreSite"); 
     Snags = extras.getStringArrayList("Snags"); 
     SnagDesc = extras.getStringArrayList("SnagDesc"); 
     Mapping = extras.getStringArrayList("Mapping"); 
     MappingDesc = extras.getStringArrayList("MappingDesc"); 
     Layout = extras.getStringArrayList("Layout"); 
     LayoutDesc = extras.getStringArrayList("LayoutDesc"); 
     ReaderSelectedItem = extras.getString("ReaderSelectedItem"); 
     MailSubject = extras.getStringArrayList("MailSubject"); 
    } 

    Set<String> CoreSiteValues = new HashSet<>(); 
    CoreSiteValues.addAll(CoreSite); 
    ModifiedCoreSiteValues.addAll(CoreSiteValues); 
    CoreSitesString = ModifiedCoreSiteValues.toString(); 
    CoreSitesString = CoreSitesString.replaceAll(",", "\",\""); 
    modifiedcoresitestring = CoreSitesString.replaceAll("]", "\"]"); 
    modifiedcoresitestring = modifiedcoresitestring.replaceAll("\\[", "[\""); 


    multiSpinner.setItems(MultiSpinnerList, modifiedcoresitestring,this); 

} 

} 

XML Spinner Teil:

<esmviewer.myandroid.com.esmviewer.MultiSpinner 
    android:id="@+id/multi_spinner" 
    android:layout_width="160dp" 
    android:layout_height="wrap_content" 
    android:layout_marginStart="15dp" 
    /> 
+0

Sind Sie sicher, dass Sie auch Ansicht hinzugefügt haben? in XML? –

+0

nein Es tut mir leid, welche Ansicht meinst du? –

+0

Ich meine wie '' in 'XML'. –

Antwort

2

ohhh, die kleinen und Bergmann Fehler, den Sie getan haben, ist man vergessen, die Schnittstelle MultiSpinnerListener zu implementieren. Ihre DCOReader Aktivität sollte so sein,

+0

Meine Wertschätzung, dies löste das Problem. Wie kann ich seine Auswahl bekommen? –

+0

Die Methode, die Sie nach der Implementierung überschreiben, gibt Ihnen möglicherweise die Auswahl. Eigentlich habe ich das nicht versucht, aber wie ich vermute. –

+0

danke ich werde es versuchen. meine Anerkennung –