0

私は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);                                  
    }

しかし、アプリケーションがクラッシュします...

よろしくお願いします!

4

1 に答える 1

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()

于 2012-08-29T02:16:50.387 に答える