Android:从按钮打开下拉框

11
在Android应用程序中,是否可以通过按钮点击打开下拉列表而不是按实际的下拉列表控件来打开下拉列表?
我尝试了以下方法:
Button btnChange = (Button)findViewById(R.id.btnChange);
            btnChange.setOnClickListener(new View.OnClickListener() {
                  public void onClick(View v) {
                     Spinner mySpinner = (Spinner) findViewById(R.id.sSpinner);
                     mySpinner.showContextMenu();
                  }
                });
4个回答

59

非常抱歉回答晚了 - 可能性存在:

((Spinner) findViewById(R.id.mySpinner)).performClick();

4
@Zeratul,performClick 直接调用了 Spinner 的 onItemSelected 方法,对吗?我们有没有办法在另一个视图的 onClick 事件中显示 Spinner,并在选择项目后调用 onItemSelected 方法? - Khobaib

14

可以实现,你只需要称之为弹出菜单而不是下拉菜单。

ImageView imageView = (ImageView) findViewById(R.id.image);
        imageView .setOnClickListener(new OnClickListener(){
            PopupMenu pum = new PopupMenu(this, findViewById(R.id.image));
            pum.inflate(R.menu.image_chooser_popup);
            pum.show();

          });
}

您的旋转器(或弹出窗口)项目将进入R.menu.image_chooser_popup:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

<item
    android:title="take a picture"
    android:titleCondensed="camera"
    android:visible="true"
    android:onClick="cameraIntent" />
<item
    android:title="choose picture from gallery"
    android:titleCondensed="string"
    android:visible="true"
    android:onClick="galleryIntent"/>
希望这篇文章能帮到某些人。如果你对我的回答有任何疑问,请随时提出。

8
尝试这一个:

Spinner mySpinner = (Spinner) findViewById(R.id.sSpinner);
Button btnChange = (Button)findViewById(R.id.btnChange);    
btnChange.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    mySpinner.performClick();
                }
            });

0
public class MainActivity extends AppCompatActivity {

    TextInputEditText packageName,partnerId,userName,mobileNo;
    Spinner dropDownMenu;
    ImageView dropDownImg;
    String[] loginType = {"Select","STAGE","PRODUCTION"};

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

        initViews();

    }

    private void initViews(){
        packageName = findViewById(R.id.packageName);
        partnerId = findViewById(R.id.partnerId);
        userName = findViewById(R.id.userName);
        mobileNo = findViewById(R.id.mobileNo);
        dropDownMenu = findViewById(R.id.dropdown_spinner);
        dropDownImg = findViewById(R.id.dropdown_img);
        ArrayAdapter spinnerAdapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_expandable_list_item_1,loginType);
        dropDownMenu.setAdapter(spinnerAdapter);
        dropDownMenu.setOnItemSelectedListener(dropDownOnClick());
        dropDownImg.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                System.out.println("schjsjcgg");
                dropDownMenu.performClick();
            }
        });
    }

    private AdapterView.OnItemSelectedListener dropDownOnClick(){
       return new AdapterView.OnItemSelectedListener() {
           @Override
           public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
               if (adapterView.getItemAtPosition(i).equals("Select")){
                   String item1 = adapterView.getItemAtPosition(i).toString();
                   System.out.println("Item1 = "+item1);

               }else{
                   String item2 = adapterView.getItemAtPosition(i).toString();
                   System.out.println("Item2 = "+item2);

               }
           }

           @Override
           public void onNothingSelected(AdapterView<?> adapterView) {

           }
       };
    }
}

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