基于微调器OnItemSelectedListener在MainActivity上启用按钮

时间:2012-08-29 01:20:12

标签: android android-spinner

我对Android开发很新,这基本上是我的第一个应用程序。

我按照developer.android.com上的指南和互联网上的其他资源与旋转器一起工作。

在我的主要活动中,我有一个微调器和一个按钮,我想要做的是根据微调器选择项启用(setClickable)按钮。

public class MainMenu extends Activity {    

private Spinner spinner1;   

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

    //Add items to spinner 1 dynamically
    addItemsOnSpinner1();    
    addListenertoSpinner();        
}          

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main_menu, menu);
    return true;
}

public void addItemsOnSpinner1(){
    spinner1 = (Spinner) findViewById(R.id.spinner1);
    List<String> list = new ArrayList<String>();
    list.add("Test 1");
    list.add("Test 2");
    list.add("Add new");
    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,list);
    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_item);
    spinner1.setAdapter(dataAdapter);       
}

public void addListenertoSpinner(){
    spinner1 = (Spinner) findViewById(R.id.spinner1);
    spinner1.setOnItemSelectedListener(new CustomOnItemSelectedListener());    
}           

}

我已经成功创建了一个OnItemSelectedListener类,我可以从中显示微调器选定的项目文本:

public class CustomOnItemSelectedListener extends Activity implements OnItemSelectedListener {

public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
    // TODO Auto-generated method stub              
    if(parent.getItemAtPosition(pos).toString()== "Add new"){
        Toast.makeText(parent.getContext(), 
                "OnItemSelectedListener : " + parent.getItemAtPosition(pos).toString(),
                Toast.LENGTH_SHORT).show();         
    }

}

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

}
}

我的问题是:

如何设置Button.setClickable? 我尝试过这样的事情:

if(parent.getItemAtPosition(pos).toString()== "Add new"){
        Button b1 = (Button)findViewById(R.id.button1);
        b1.setClickable(true);                                  
    }

但应用程序崩溃......

提前干杯!

1 个答案:

答案 0 :(得分:1)

您不应仅仅为侦听器扩展活动。试试这个

public void addListenertoSpinner(){
    spinner1 = (Spinner) findViewById(R.id.spinner1);
    spinner1.setOnItemSelectedListener(new OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
            if(parent.getItemAtPosition(pos).toString()== "Add new"){
                Button b1 = (Button)findViewById(R.id.button1);
                b1.setClickable(true);                                  
            }

        }

        public void onNothingSelected(AdapterView<?> arg0) {

        }
    });    
} 

这会创建一个匿名类(在CURRENT活动的概念中),可以安全地使用findViewById()