3つのアクティビティで構成されるAndroidアプリのプロジェクトを作成しました。メインアクティビティでボタンをクリックしたときに、選択したSpinnerオプションのテキストに基づいて別のアクティビティでタイトルを設定する方法
最初のアクティビティには、3つの要素、2つのスピナーとボタンのレイアウトがあります。
私は彼らが次のように動作させるために意図して設定します。
MainActivity.java: 1.ちょうど私がアプリの起動時にカテゴリのセットをロードする最初のスピナーを望んでいたとしましょう。例えば、収入、支出。 2.最初のスピナーからカテゴリを選択すると、2番目のスピナーは2番目のスピナーにそれぞれのサブカテゴリーを読み込みます。たとえば、最初のスピナーで収入を選択した場合、コミッション、給与、ボーナスなどをロードして2番目のスピナー、支出を選択すると、月間支出、運送、請求書などが2番目のスピナーに読み込まれます。 3.ここで、私が選択したサブカテゴリに基づいて、ボタンをクリックすると、新しいアクティビティが開き、その特定のカテゴリとサブカテゴリのアクションバーのタイトルが設定されます。たとえば、「給与と給与」を選択した場合、主アクティビティのボタンをクリックすると、次のアクティビティには「給与」がタイトルとして表示されます。
私はUtils.javaという名前のクラスを作成して、カテゴリとサブカテゴリの名前のセットを文字列配列として保存しました。私はMainActivity.javaために行っている符号化が以下に与えられる
public class Utils{
public static String[] mainCategoryList =
{
"Choose One",
"Income",
"Expenditure"
};
//
public static String[] chooseOne_list=
{
"Choose One"
};
public static String[] income_subCategoryList =
{
"Bonus",
"Commision",
"Salary"
};
public static String[] expenditure_subCategoryList=
{
"Bills",
"Conveyance",
"Monthly Expenditure"
};
public static String[] income=
{
"Income, Bonus",
"Income, Commission",
"Income, Salary"
};
public static String[] expenditure=
{
"Expenditure, Bills",
"Expenditure, Conveyance",
"Expenditure, Monthly Expenditure"
};
}
、
public class MainActivity extends AppCompatActivity {
Spinner spinner1_mainCategory, spinner2_subCategory;
Button buttonChoose;
String spinner1Item, spinner2Item;
Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Spinner element
spinner1_mainCategory = (Spinner)findViewById(R.id.spinner1_mainCategory);
spinner2_subCategory = (Spinner)findViewById(R.id.spinner2_subCategory);
//Button element
buttonChoose = (Button)findViewById(R.id.buttonChoose);
//To keep onCreate() clean of multiple adapter setting
adapterMethod(spinner1_mainCategory,mainCategoryList);
// Spinner click listener
spinner1_mainCategory.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
//String.valueOf(array_name.getSelectedItem()) captures the value of the selected option of a specific string array onClick event
spinner1Item = String.valueOf(spinner1_mainCategory.getSelectedItem());
switch (position){
case 0:
adapterMethod(spinner2_subCategory,chooseOne_list);
spinner2_subCategory.setVisibility(View.GONE);
//Button click listener
buttonChoose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (spinner1Item.contentEquals(Utils.mainCategoryList[0])){
Toast toast = Toast.makeText(getApplicationContext(), "Choose a Category First", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER|Gravity.CENTER_HORIZONTAL,0,0);
toast.show();
}
}
});
break;
case 1:
adapterMethod(spinner2_subCategory,income_subCategoryList);
spinner2_subCategory.setVisibility(View.VISIBLE);
break;
case 2:
adapterMethod(spinner2_subCategory,expenditure_subCategoryList);
spinner2_subCategory.setVisibility(View.VISIBLE);
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
spinner2_subCategory.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, final int position, long id) {
spinner2Item = String.valueOf(spinner2_subCategory.getSelectedItem());
switch (position){
case 0:
//Income Category, Bonus Sub-category
if (spinner2Item.contentEquals(Utils.mainCategoryList[1]) && spinner2Item.contentEquals(income_subCategoryList[0])){
buttonChoose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
changeTitleInNextActivity(Utils.income[0]);
}
});
}
//Expenditure Category, Bills Sub-category
if (spinner2Item.contentEquals(Utils.mainCategoryList[2]) && spinner2Item.contentEquals(expenditure_subCategoryList[0])){
buttonChoose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
changeTitleInNextActivity(Utils.expenditure[0]);
}
});
}
break;
case 1:
//Income Category, Commission Sub-category
if (spinner2Item.contentEquals(Utils.mainCategoryList[1]) && spinner2Item.contentEquals(income_subCategoryList[1])){
buttonChoose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
changeTitleInNextActivity(Utils.income[1]);
}
});
}
//Expenditure Category, Conveyance Sub-category
if (spinner2Item.contentEquals(Utils.mainCategoryList[2]) && spinner2Item.contentEquals(expenditure_subCategoryList[1])){
buttonChoose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
changeTitleInNextActivity(Utils.expenditure[1]);
}
});
}
break;
case 2:
//Income Category, Salary Sub-category
if (spinner2Item.contentEquals(Utils.mainCategoryList[1]) && spinner2Item.contentEquals(income_subCategoryList[2])){
buttonChoose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
changeTitleInNextActivity(Utils.income[2]);
}
});
}
//Expenditure Category, Monthly Expenditure Sub-category
if (spinner2Item.contentEquals(Utils.mainCategoryList[2]) && spinner2Item.contentEquals(expenditure_subCategoryList[2])){
buttonChoose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
changeTitleInNextActivity(Utils.expenditure[2]);
}
});
}
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
}
public void adapterMethod(View v, String[] list){
// Creating adapter for spinner
ArrayAdapter<String> dataAdapter = new ArrayAdapter<>(this,
android.R.layout.simple_spinner_item, list);
// Drop down layout style - list view with radio button
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
dataAdapter.notifyDataSetChanged();
// attaching adapter to spinner for district
if (v.getId()==R.id.spinner1_mainCategory){
spinner1_mainCategory.setAdapter(dataAdapter);
spinner1_mainCategory.setSelection(0, false);
}
if (v.getId()==R.id.spinner2_subCategory){
spinner2_subCategory.setAdapter(dataAdapter);
spinner2_subCategory.setSelection(0, false);
}
}
public void changeTitleInNextActivity(String title){
intent = new Intent(getApplicationContext(),SecondActivity.class);
intent.putExtra("Title", title);
startActivity(intent);
}
}
SecondActivity.java
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Intent intent = getIntent();
String title = intent.getStringExtra("Title");
getSupportActionBar().setTitle(title);
}
}
Iドン」理由を理解していないが、私はca私が望むようにコーディングを私のために働かせないでください。 1回目と2回目のスピナーからの選択は完全に機能しますが、私が試したアプローチの数にかかわらず、次のアクティビティでタイトルを設定することができないボタンです。
私に間違ったことを教えてください。どのようにこの種の落とし穴を避けるためにコードを改善する。
ボタンを作ることができません "選択":
- は、2番目のアクティビティでSecondActivity
ポストSecondActivityがAppCompatActivity { – Mushirih
パブリッククラス。 setContentView(R.layout。activity_second); } } –
パブリッククラスSecondActivityがAppCompatActivity { @Override 保護され、ボイドのonCreate(バンドルsavedInstanceState){ super.onCreate(savedInstanceState)を拡張拡張し、あなたのButtonsActivityクラス –