簡體   English   中英

具有多個選擇的Android微調器

[英]Android Spinner With Multiple Selection

我是android的新手,我整天都在嘗試從以下代碼中選擇多個選項來應用微調器(此問題的答案是有多個選擇的Android Spinner。

問題是我無法通過以下行將偵聽器從主活動傳遞到微調器Java文件:

multiSpinner.setItems(MultiSpinnerList, modifiedcoresitestring, this);

參數(this)是不可接受的,我也嘗試了MainActivity.this,但沒有成功。 這里有什么問題?

微調器代碼中的Set方法應該接收(偵聽器),但我不知道它是什么以及如何發送。

微調器Java代碼:

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

活動代碼:

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部分:

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

哦,您犯的一個小錯誤是忘記了實現接口MultiSpinnerListener 您的DCOReader活動應該是這樣的,

public class DCOReader extends AppCompatActivity implements MultiSpinner.MultiSpinnerListener{
  ....
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM