【问题标题】:Android Spinner Dialog is not Populating?Android Spinner 对话框未填充?
【发布时间】:2011-11-23 06:04:43
【问题描述】:

我有一个由两个片段组成的活动。左边是侧边栏,右边是 MapView(见下面的截图)。

在左侧我有一个微调器,它将填充地图上的对象。现在,在我弄清楚这个问题之前,我已经用一些值对其进行了硬编码。选择 Spinner 时,会出现一个对话框,但它是空的。知道发生了什么吗?

这是我的左侧片段代码(不是很复杂):

package android.splitdisplay;


import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.Toast;

public class SideFragment extends Fragment {
    String[] tracks = { "ObjectOne", "ObjectTwo",
            "ObjectThree"

    };


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.getActivity().setContentView(R.layout.sidefragment);

        final Spinner s = (Spinner) this.getActivity().findViewById(
                R.id.track_spinner);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this
                .getActivity().getBaseContext(),
                android.R.layout.simple_spinner_item, tracks);
        s.setAdapter(adapter);

        s.setOnItemSelectedListener(new OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
                int item = s.getSelectedItemPosition();
                Toast.makeText(SideFragment.this.getActivity().getBaseContext(),
                        "clicked "+item, Toast.LENGTH_SHORT).show();
            }

                @Override
            public void onNothingSelected(AdapterView<?> arg0) {
            }
        });

    }

    public void onListItemClick(ListView parent, View v, int position, long id) {

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        return inflater.inflate(R.layout.sidefragment, container, true);
    }
}

这是 SideFragment 的 XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Tracks"
        android:textColor="#adff2f"
        android:textSize="30sp" />

    <Spinner
        android:id="@+id/track_spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:drawSelectorOnTop="true"
        android:prompt="@string/track_prompt"
        android:spinnerMode="dialog" >
    </Spinner>

</LinearLayout>

这是我单击微调器时看到的内容:

以下是压缩包中的所有源代码:

http://db.tt/KMGXhZWc

【问题讨论】:

    标签: java android spinner


    【解决方案1】:

    问题不在于 Spinner,问题在于您正在为两个 Spinner 充气。一个在 onCreateView 方法中,另一个在这一行:

    this.getActivity().setContentView(R.layout.sidefragment);
    

    而且只有一个微调器与提供者...所以我建议您在 onCreationView 设置所有 GUI 变量,如下所示:

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.sidefragment, container, true);
        final Spinner s = (Spinner) v.findViewById(
                R.id.track_spinner);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this
                .getActivity().getBaseContext(),
                android.R.layout.simple_spinner_item, tracks);
        s.setAdapter(adapter);
    
        s.setOnItemSelectedListener(new OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
                int item = s.getSelectedItemPosition();
                Toast.makeText(SideFragment.this.getActivity().getBaseContext(),
                        "clicked "+item, Toast.LENGTH_SHORT).show();
            }
    
                @Override
            public void onNothingSelected(AdapterView<?> arg0) {
            }
        });
        return v;
    }
    

    并移除被覆盖的方法 onCreate。

    【讨论】:

      【解决方案2】:

      这就是我一直做我的微调器的方式

      ArrayAdapter<CharSequence> cAdapter;
          cAdapter = ArrayAdapter.createFromResource(this, R.array.colors,android.R.layout.simple_spinner_item);
          int cSpinnerDD = android.R.layout.simple_spinner_dropdown_item;
          cAdapter.setDropDownViewResource(cSpinnerDD);
          color.setAdapter(cAdapter);
      

      试试看

      【讨论】:

      • 我尝试了类似的调用:int cSpinnerDD = android.R.layout.simple_spinner_dropdown_item; cAdapter.setDropDownViewResource(cSpinnerDD);它似乎没有工作
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多