Android - 动态下拉菜单

9
我有一个游戏视图,触发1个对话框,从这里触发第二个对话框。
在第二个对话框中,我有2个按钮和1个下拉菜单。我遇到的问题是如何让下拉菜单在我的视图中出现,并显示动态数据。
实质上,当单击按钮时,我需要弹出下拉菜单并列出所有相关数据。我有3个不同的ArrayLists(1个字符串和2个整数),它们保存了需要动态添加到每个下拉菜单选项中的不同信息。
pt1 -   ArrayLists1
        ArrayLists2
        ArrayLists3
pt2 -   ArrayLists1
        ArrayLists2
        ArrayLists3

进度条的XML布局代码:

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_gravity="center_horizontal">
    <Button android:text="@string/attack" 
            android:id="@+id/Attack" 
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content" />
    <Button android:text="@string/useitem" 
            android:id="@+id/UseItemBtn" 
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content" />
    <Spinner android:text="@string/useitem"
            android:id="@+id/UseItemSpin"
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content"
            android:visibility="gone" />
    <Button android:text="@string/equipweapon" 
            android:id="@+id/EquipWeapon" 
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content"/>
</LinearLayout>

这里是我目前用来触发旋转器点击的代码(这里触发了日志):
import android.widget.AdapterView.OnItemSelectedListener;

@Override
public void onClick(View clicked)
{
    if(clicked.getId() == R.id.UseItemBtn)
    {
        Spinner spinner = (Spinner) findViewById(R.id.UseItemSpin);

        ArrayList<String> arrayList1 = new ArrayList<String>();
        arrayList1.add("test item the first one");
        arrayList1.add("really long list item - section 2 goes here - finally section 3");

        ArrayAdapter<String> adp = new ArrayAdapter<String> (context,android.R.layout.simple_spinner_dropdown_item,arrayList1);
        // APP CURRENTLY CRASHING HERE
        spinner.setAdapter(adp);
       //Set listener Called when the item is selected in spinner
       spinner.setOnItemSelectedListener(new OnItemSelectedListener() 
       {
            public void onItemSelected(AdapterView<?> parent, View view, int position, long arg3) 
            {
                String city = "The city is " + parent.getItemAtPosition(position).toString();
                Toast.makeText(parent.getContext(), city, Toast.LENGTH_LONG).show();
            }

            public void onNothingSelected(AdapterView<?> arg0) 
            {
                // TODO Auto-generated method stub
            }
        });
    }
    BattleRun.show();
}

我如何在点击时添加动态旋转器。当点击旋转器时,我希望在实际旋转器内部有一个提交按钮,以便他们可以在选择之前翻阅选项(应始终可见)。
最后,当在旋转器中选择项目并提交后,上一个对话框将自动使用新数据刷新(这很容易实现)。
如果您需要更多的代码片段,请告诉我,任何帮助或指导都将不胜感激。
谢谢, L&L合作伙伴
1个回答

19
您可以使用此代码将您的下拉列表(Spinner)填充为字符串数组列表 -
    public void onClick(View clicked){
    if(clicked.getId() == R.id.Attack){
        Spinner spinner = (Spinner) findViewById(R.id.UseItem);

      //Sample String ArrayList
        ArrayList<String> arrayList1 = new ArrayList<String>();

        arrayList1.add("Bangalore");
        arrayList1.add("Delhi");
        arrayList1.add("Mumbai");
        ArrayAdapter<String> adp = new ArrayAdapter<String> (this,android.R.layout.simple_spinner_dropdown_item,arrayList1);
        spinner.setAdapter(adp);

        spinner.setVisibility(View.VISIBLE);
       //Set listener Called when the item is selected in spinner
       spinner.setOnItemSelectedListener(new OnItemSelectedListener() 
       {
            public void onItemSelected(AdapterView<?> parent, View view,
                    int position, long arg3) 
            {
                String city = "The city is " + parent.getItemAtPosition(position).toString();
                Toast.makeText(parent.getContext(), city, Toast.LENGTH_LONG).show();

            }

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

        //BattleRun.dismiss();
        Log.d("Item","Clicked");

    }
}

这段代码将放置在您的布局xml文件中 -

<!-- Add onClick attribute on this button -->
<Button android:text="@string/attack" 
        android:id="@+id/Attack" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:onClick="onClick" />
<Spinner android:text="@string/useitem" 
        android:id="@+id/UseItem" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:visibility="gone" />
<Button android:text="@string/equipweapon" 
        android:id="@+id/EquipWeapon" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"/>

请注意,您没有在XML文件内添加onClick。这就是为什么您的onClick函数没有被调用的原因。 您也可以在strings.xml文件中使用string-array来使用静态列表。


我对Android和Java开发都很陌生。基本上,我有一个对话框。它有一个按钮(可以工作)和两个下拉列表。我需要的是当点击下拉列表时,它会按照我在问题中展示的格式加载。这将包括来自3个不同ArrayLists的数据(1个字符串和2个整数)。总之,我遇到的主要问题是检测下拉列表按钮的单击,然后使用动态内容创建它。谢谢。 - SingleWave Games
嘿,这个答案有帮助吗?你的应用程序得到了所需的东西吗? - Sonam Daultani
你好,我试图实施你上面的修复方法,但是遇到一些错误。你的第3行代码涉及ArrayAdapter,但我得到一个说它未定义的错误。而且,无法检测到setOnItemSelectedListener。我应该使用setOnItemClickListener吗?谢谢。 - SingleWave Games
对于数组列表,您必须手动创建一个合并了3个数组列表的ArrayList,以进行简单的Java编程。因为Android没有提供这样的功能。 - Sonam Daultani
我已经编辑了XML和Activity的代码。现在它应该可以完美地工作了。 - Sonam Daultani
显示剩余13条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接