2016-04-18 16 views
0

私の問題は、ユーザーが選択できる43個のオプションを含む18個のスピナーがあることです。私は、各オプションが異なるページ上のリンクを変更して、ユーザーがそのオプションに関するpdfを見ることを望む。私は選択を共有するために共有された環境設定を持っています。私はif/else if文を実装していますが、if/else文を使用すると、それぞれのスピンナーについて43、私は700文以上のif文を実装する必要があり、私が知らない私の考えを実装する簡単な方法が必要です。ここでのサンプルコードは、次のとおり同じものの複数のif文を簡単に実行する方法

if (spinnerValue == 1) 
    { 
     TextView textView =(TextView)findViewById(R.id.textViewWeb1); 
     textView.setClickable(true); 
     textView.setMovementMethod(LinkMovementMethod.getInstance()); 
     String text = "<a href='http://qualifications.pearson.com/content/dam/pdf/BTEC-Nationals/Information-Technology/2010/Specification/Unit-1-Communication-and-Employability-Skills-for-IT.pdf'>Unit 1: Communication and Employability Skills for IT</a>"; 
     textView.setText(Html.fromHtml(text)); 
    } 
    else if (spinnerValue == 2){ 
     TextView textView =(TextView)findViewById(R.id.textViewWeb1); 
     textView.setClickable(true); 
     textView.setMovementMethod(LinkMovementMethod.getInstance()); 
     String text = "<a href='http://qualifications.pearson.com/content/dam/pdf/BTEC-Nationals/Information-Technology/2010/Specification/Unit-2-Computer-Systems.pdf'>Unit 2: Computer Systems</a>"; 
     textView.setText(Html.fromHtml(text)); 
    } 
    else if (spinnerValue == 3){ 
     TextView textView =(TextView)findViewById(R.id.textViewWeb1); 
     textView.setClickable(true); 
     textView.setMovementMethod(LinkMovementMethod.getInstance()); 
     String text = "<a href='http://qualifications.pearson.com/content/dam/pdf/BTEC-Nationals/Information-Technology/2010/Specification/Unit-3-Information-Systems.pdf'>Unit 3: Information Systems</a>"; 
     textView.setText(Html.fromHtml(text)); 
    } 

だからこれの終わりに、そこに(43を介しspinnervalue == 1)であれば43であると18 spinnervaluesう。私は非常にJavaとアンドロイドスタジオので、これは非常に感謝して任意のヘルプやガイダンスの説明に新しいです。

EDIT:私のif文が動作し、スイッチもありますが、43 if/switch文を18回実装する必要があります。 if(spinnervalue 1〜18 == 1)の行に沿って何かできることはありますか?そうすれば、43ケースを一度書き込んで、すべてのスピナー値(1〜18)に適用させることができます

+0

スイッチの文を使用 – Kathi

+0

実際にはスイッチを使用することを検討することができます –

+0

私は試してみましたが、それは似ていると私は18のスピナーの43ケースを実装する必要があります。 – Madjosh

答えて

1

これを多くリファクタリングすることができます。

TextView textView =(TextView)findViewById(R.id.textViewWeb1); 
    textView.setClickable(true); 
    textView.setMovementMethod(LinkMovementMethod.getInstance()); 
    String text = ""; 
    switch(spinnerValue) { 
     case 1: 
      text = "<a href='http://qualifications.pearson.com/content/dam/pdf/BTEC-Nationals/Information-Technology/2010/Specification/Unit-1-Communication-and-Employability-Skills-for-IT.pdf'>Unit 1: Communication and Employability Skills for IT</a>"; 
      break; 
     case 2: 
      text = "<a href='http://qualifications.pearson.com/content/dam/pdf/BTEC-Nationals/Information-Technology/2010/Specification/Unit-2-Computer-Systems.pdf'>Unit 2: Computer Systems</a>"; 
      break; 
    } 
    textView.setText(Html.fromHtml(text)); 

しかし、私はこれが本当に最良のアプローチであるとは確信していません。私は、おそらくMap(または配列、それはキーの数値だけである)を作成してスピナー値 - > URLを作成し、これを使用してリンクを設定します。より少ないコード行を必要とし、将来的にはさらに拡張可能になるでしょう!

2

ここに私の最初の考えは、この上にある:

String[] fileNames = new String[] { 
//Put your filenames here in order 
} 

そして、あなたの現在のコードで:これはあなたのための最も効率的な方法があるが、考えるようにしようとした場合

if(spinnerValue<=fileNames.length) { //Make sure the value is valid 
    TextView textView =(TextView)findViewById(R.id.textViewWeb1); 
    textView.setClickable(true); 
    textView.setMovementMethod(LinkMovementMethod.getInstance()); 
    String text = "<a href='http://qualifications.pearson.com/content/dam/pdf/BTEC-Nationals/Information-Technology/2010/Specification/"+fileNames[spinnerValue-1]+".pdf'>"+fileNames[spinnerValue-1].replaceAll("-"," ")+"</a>"; 
    textView.setText(Html.fromHtml(text)); 
} 

わかりません動的にhtmlを設定する方法

2

唯一の違いは文字列で、連続する値1〜43を使用しているため、最も簡単なのはテキストの配列です。

配列はゼロベースであることに注意してください。

private static final String[] SPINNER_TEXTS = { 
    /*1*/"<a href='http://qualifications.pearson.com/content/dam/pdf/BTEC-Nationals/Information-Technology/2010/Specification/Unit-1-Communication-and-Employability-Skills-for-IT.pdf'>Unit 1: Communication and Employability Skills for IT</a>", 
    /*2*/"<a href='http://qualifications.pearson.com/content/dam/pdf/BTEC-Nationals/Information-Technology/2010/Specification/Unit-2-Computer-Systems.pdf'>Unit 2: Computer Systems</a>", 
    /*3*/"<a href='http://qualifications.pearson.com/content/dam/pdf/BTEC-Nationals/Information-Technology/2010/Specification/Unit-3-Information-Systems.pdf'>Unit 3: Information Systems</a>" 
}; 
TextView textView =(TextView)findViewById(R.id.textViewWeb1); 
textView.setClickable(true); 
textView.setMovementMethod(LinkMovementMethod.getInstance()); 
textView.setText(Html.fromHtml(SPINNER_TEXTS[spinnerValue - 1])); 
0

あなたは、このようなマッピングテーブルを作成することができます

Map<Integer, String> spinnerValueToLinkMapping = new HashMap<Integer, String> {{ 
     put(1, "<a href='http://qualifications.pearson.com/content/dam/pdf/BTEC-Nationals/Information-Technology/2010/Specification/Unit-1-Communication-and-Employability-Skills-for-IT.pdf'>Unit 1: Communication and Employability Skills for IT</a>"); 
     put(2, "<a href='http://qualifications.pearson.com/content/dam/pdf/BTEC-Nationals/Information-Technology/2010/Specification/Unit-2-Computer-Systems.pdf'>Unit 2: Computer Systems</a>"); 
     put(3, "<a href='http://qualifications.pearson.com/content/dam/pdf/BTEC-Nationals/Information-Technology/2010/Specification/Unit-3-Information-Systems.pdf'>Unit 3: Information Systems</a>"); 
    }} 

をして、必要なリンクを取得するには、次のコードを使用します。これを持っ

TextView textView =(TextView)findViewById(R.id.textViewWeb1); 
     textView.setClickable(true); 
     textView.setMovementMethod(LinkMovementMethod.getInstance()); 
     String text = spinnerValueToLinkMapping.get(spinnerValue); 
     textView.setText(Html.fromHtml(text)); 

を、あなたは終了しますマッピングテーブルとDRYコードを簡単にサポートします。

関連する問題