【问题标题】:How to include a Spinner in custom spinner layout?如何在自定义微调器布局中包含微调器?
【发布时间】:2016-09-08 11:20:44
【问题描述】:

我正在尝试使用 spinner 内的 spinner 来实现文件层次结构。所以我想在 spinner 的自定义布局中使用 Spinner 。我无法将微调器上下文提供给微调器,我想知道在 Android 中实现文件层次结构的任何其他设计?

public class Main2Activity extends AppCompatActivity {
String[] spinnerValues = { "Blur", "NFS", "Burnout","GTA IV", "Racing"};
private WeakReference<Main2Activity> main2ActivityWeakRef;
TextView text;
Spinner mysubSpinner;
MyAdapter myAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
    //View viewToLoad = LayoutInflater.from(this.getParent()).inflate(R.layout.activity_main2, null);
    //this.setContentView(viewToLoad);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    Spinner mySpinner = (Spinner) findViewById(R.id.spinner_show);
    ArrayList<String> level1 = new ArrayList<String>();
    level1.add("one");
    level1.add("two");
    level1.add("three");
    level1.add("four");
    myAdapter = new MyAdapter(this, R.layout.custom_spinner, level1);
    myAdapter.setDropDownViewResource(R.layout.custom_spinner);
    mySpinner.setAdapter(myAdapter);
    //ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( this, R.array.string_array_name,R.layout.custom_spinner);
    //mySpinner.setDropDownViewResource();
    //mySpinner.setAdapter(adapter);

    mySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            Log.d("Main2Activity", "onItemSelected");
            if (!(((Activity) parent.getContext()).isFinishing())) {
                mysubSpinner.setAdapter(new MySubAdapter(parent.getContext(), R.layout.custom_subspinner, spinnerValues));
                // mysubSpinner.setAdapter(new MyAdapter(MainActivity.this, R.layout.custom_spinner, new String[]{spinnerValues[position]}));

            } else {
                Log.d("Main2Activity", "unable ta set adapter");
            }
        }
        @Override
        public void onNothingSelected(AdapterView<?> parent) {
        }
    });

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });
}

public class MyAdapter extends ArrayAdapter<ArrayList>
{
    Context ctx;
    ArrayList<String> objects;
    public MyAdapter(Context ctx, int txtViewResourceId, ArrayList objects)
    {
        super(ctx, txtViewResourceId, objects);
        this.ctx=ctx;
        this.objects = objects;
    }

    @Override
    public View getDropDownView(int position, View cnvtView, ViewGroup prnt)
    {
        return getCustomView(position, cnvtView, prnt);
    }

    @Override
    public View getView(int pos, View cnvtView, ViewGroup prnt)
    {
        return getCustomView(pos, cnvtView, prnt);
    }

    public View getCustomView(int position, View convertView, ViewGroup parent)
    {
        LayoutInflater inflater = getLayoutInflater();
        //View mySpinner = inflater.inflate(R.layout.custom_spinner, parent, false);
        View mySpinner = LayoutInflater.from(parent.getContext()).inflate(R.layout.custom_spinner, null);
        text = (TextView) mySpinner.findViewById(R.id.text);
        text.setText(objects.get(position));
        mysubSpinner = (Spinner) mySpinner.findViewById(R.id.spinner_sub);
        return mySpinner;
    }
}

public class MySubAdapter extends ArrayAdapter<String>
{
    Context ctx;
    public MySubAdapter(Context ctx, int txtViewResourceId, String[] objects)
    { super(ctx, txtViewResourceId, objects);
        this.ctx=ctx;
    }

    @Override
    public View getDropDownView(int position, View cnvtView, ViewGroup prnt)
    {
        return getCustomView(position, cnvtView, prnt);
    }

    @Override
    public View getView(int pos, View cnvtView, ViewGroup prnt)
    {
        return getCustomView(pos, cnvtView, prnt);
    }
    public View getCustomView(int position, View convertView, ViewGroup parent)
    {
        LayoutInflater inflater = getLayoutInflater();
        //View mySpinner = inflater.inflate(R.layout.custom_subspinner, parent, false);
        View mySpinner = LayoutInflater.from(parent.getContext()).inflate(R.layout.custom_subspinner, null);
        //Spinner mysubSpinner = (Spinner) mySpinner.findViewById(R.id.spinner_sub);
        // mysubSpinner.setAdapter(new MyAdapter(MainActivity.this, R.layout.custom_spinner, new String[]{spinnerValues[position]}));
        //mysubSpinner.setAdapter(new MyAdapter(ctx,R.layout.custom_subspinner,new String[]{spinnerValues[position]}));
        TextView main_text = (TextView) mySpinner
                .findViewById(R.id.text_main_seen);
        main_text.setText(spinnerValues[position]);
        return mySpinner;
    }
}

【问题讨论】:

  • 分享你的代码
  • 无法添加代码,就像在自定义微调器布局中添加其他微调器一样。
  • 添加代码@Pawanpreet

标签: android file android-spinner hierarchy


【解决方案1】:

我可以用这段代码解决这个问题...

myspiner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            Log.d("Main2Activity", "onItemSelected");
            myspiner2 = (Spinner) findViewById(R.id.myspiner2);
            if (!(((Activity) parent.getContext()).isFinishing())) {
                if (myspiner.getSelectedItem().equals("two")) {
                    myspiner2.setAdapter(new MySubAdapter(Main3Activity.this, R.layout.custom_spinner, spinnerValues));
                }
                // mysubSpinner.setAdapter(new MyAdapter(MainActivity.this, R.layout.custom_spinner, new String[]{spinnerValues[position]}));

            } else {
                Log.d("Main2Activity", "unable ta set adapter");
            }
        }

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

【讨论】:

  • 可以截图吗?
  • 我已添加截图,请查看
  • 我想你误会了。您正在使用两个微调器,但我需要微调器内的微调器。就像您在第一个微调器中选择了两个,拥有两个的项目应该像微调器一样。
  • 你想在选择项目时重置同一个微调器的值吗??????在您的代码中,您没有初始化 mysubSpinner。
  • 对不起,我在代码中尝试了其他方式,基本上我想要的是,我必须在其他微调器中使工作成为微调器(项目)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-25
  • 2018-08-21
相关资源
最近更新 更多