2016-12-25 1 views
0

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回目のスピナーからの選択は完全に機能しますが、私が試したアプローチの数にかかわらず、次のアクティビティでタイトルを設定することができないボタンです。

私に間違ったことを教えてください。どのようにこの種の落とし穴を避けるためにコードを改善する。

ボタンを作ることができません "選択":

  1. は、2番目のアクティビティでSecondActivity
+0

ポストSecondActivityがAppCompatActivity { – Mushirih

+0

パブリッククラス。 setContentView(R.layout。activity_second); } } –

+0

パブリッククラスSecondActivityがAppCompatActivity { @Override 保護され、ボイドのonCreate(バンドルsavedInstanceState){ super.onCreate(savedInstanceState)を拡張拡張し、あなたのButtonsActivityクラス –

答えて

0

に行くために、 はあなたの渡された文字列を取得

String title=getIntent().getStringExtra("Title"); 

は、次に設定しますあなたのタイトル

getSupportActionBar().setTitle(title); 
+0

2番目のアクティビティのアクションバー自体にタイトルを設定するためにコーディングの部分を追加するのを忘れていたことを指摘してくれてありがとう、私はその面を修正しましたが、悲しいことですがそれはいい理由ではありません コーディングをもう一度見て、私が間違った箇所を教えてください –

+0

changeTitleInNextActivityメソッドのtitleの値をテストして、名前の表示がないアクションバーを表示できますか? – Mushirih

+0

私が思う唯一のこと起こっているのはif else文で、argnerはspinner2のonItemSelectedListenerで正しく動作していません –

関連する問題