2017-04-24 24 views
-2

私は主要なプロジェクトに取り組んでおり、取得した文字列配列の値に基づいて別のインテントを開くようにしたい。ボタンのOnClickListener内にif文とelse if文を使用しましたが、もうクリックしません。私を助けてください。ifステートメントをAndroidのボタンのOnClickListener内に配置する方法

これは私のXMLファイルである:私は私の場合、他の条件はの値に基づいて仕事をしたい

public class ActivityBookDetails extends AppCompatActivity { 

    public static final String EXTRA_OBJCT = "com.app.sample.recipe.OBJ"; 

    private Book book; 
    private FloatingActionButton fab; 
    private View parent_view; 

    Button button; 
    String[] obj; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(activity_book_details); 
     parent_view = findViewById(android.R.id.content); 
     button = (Button)findViewById(R.id.buttonpdf); 


     book = (Book) getIntent().getSerializableExtra(EXTRA_OBJCT); 
     fab = (FloatingActionButton) findViewById(R.id.fab); 
     fabToggle(); 
     setSupportActionBar((Toolbar) findViewById(R.id.toolbar)); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     getSupportActionBar().setTitle(book.getName()); 

     ((ImageView) findViewById(R.id.image)).setImageResource(book.getPhoto()); 

     LinearLayout subjects = (LinearLayout) findViewById(R.id.subjects); 


     final String[] title_subjects = getResources().getStringArray(R.array.Subjects); 
     addIngredientsList(subjects, title_subjects); 
     obj = title_subjects; 

     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if ("Soft Computing".equals(obj)) { 
        Intent intent = new Intent(ActivityBookDetails.this, pdfviewactivity.class); 

        startActivity(intent); 
       } 
       else if ("Web Engineering".equals(obj)) { 
        Intent intent = new Intent(ActivityBookDetails.this, pdfweben.class); 

        startActivity(intent); 
       } 
       else if ("Network Management".equals(obj)) { 
        Intent intent = new Intent(ActivityBookDetails.this, pdfnetwork.class); 

        startActivity(intent); 
       } 
       else if ("Wireless Network".equals(obj)) { 
        Intent intent = new Intent(ActivityBookDetails.this, pdfwireless.class); 

        startActivity(intent); 
       } 
      } 
     }); 

<android.support.v7.widget.CardView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_margin="5dp" 
    app:cardCornerRadius="3dp" 
    app:cardElevation="2dp"> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:padding="@dimen/spacing_large"> 
    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:paddingBottom="@dimen/spacing_middle" 
     android:text="Syllabus" 
     android:textAppearance="@style/TextAppearance.AppCompat.Title" /> 

    <Button 
     android:id="@+id/buttonpdf" 
     style="@style/Widget.AppCompat.Button" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@color/colorPrimary" 
     android:text="Open Book" /> 

</LinearLayout> 

そして、これが同じ活動のためのJavaファイルであります文字列配列。 ... ...

if ("Soft Computing".equals(obj)) { 

(注

final String[] title_subjects = getResources().getStringArray(R.array.Subjects); 
obj = title_subjects; 

そして

public class pdfwireless extends AppCompatActivity { 
    PDFView pdfView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_pdfwireless); 
     pdfView = (PDFView)findViewById(R.id.pdfView); 
     pdfView.fromAsset("wirelessnetwork.pdf").load(); 
    } 
} 
+0

デバッグし、 'obj'の値を確認してください –

答えて

1

よりもきれいになりますが、おそらく内部の条件文を追加しようとするべきではありませんOnClickListenerの代わりに、最も単純なことは、たとえば条件ロジックを別のメソッドに移動することです。

@Override 
public void onClick(View view){ 
    goToNextView(); 
} 

private void goToNextView(){ 
    if (title_subjects[0] == "Soft Computing") { 
     Intent intent = new Intent(ActivityBookDetails.this, pdfviewactivity.class); 
     startActivity(intent); 
    } 
    // else if {} 
    // else {} 
} 

すでにcricket_007が提案しているように、if/else if文を使用するよりも良い方法があります。多くのオプションを追加する予定の場合は、列挙型またはマップを使用することを検討してください。この方法の欠点は、goToNextView方法は、新しい科目が追加されるたびに変更する必要があるが

public enum Subjects { 
    SOFT_COMPUTING("Soft Computing", pdfviewactivity.class), 
    WEB_ENGINEERING("Web Engineering", pdfweben.class), 
    NETWORK_MANAGEMENT("Wireless Network", pdfnetwork.class), 
    WIRELESS_NETWORK("Network Management", pdfwireless.class); 

    private String name; 
    private Class clazz; 

    Subjects(String name, Class clazz){ 
     this.name = name; 
     this.clazz = clazz; 
    } 

    public static Class getClass(String title_subject) { 
     for(Subjects subject: Subjects.values()) { 
      if (subject.name.equals(title_subject)) { 
       return subject.clazz; 
      } 
     } 
     return null; 
    } 
} 

private void goToNextView() { 

    //Alternative to conditionals using Enum 
    Class theClassToGoTo = Subjects.getClass(title_subjects[0]); 
    Intent intent = new Intent(ActivityBookDetails.this, theClassToGoTo); 
    startActivity(intent); 

    //Alternative to conditionals using HashMap 
    Map<String, Class> subject_map = new HashMap<>(); 
    subject_map.put("Soft Computing", pdfviewactivity.class); 
    subject_map.put("Web Engineering", pdfweben.class); 
    subject_map.put("Wireless Network", pdfnetwork.class); 
    subject_map.put("Network Management", pdfwireless.class); 

    Class theClassToGoTo2 = subject_map.get(title_subjects[0]); 
    Intent intent2 = new Intent(ActivityBookDetails.this, theClassToGoTo2); 
    startActivity(intent); 
} 

一番簡単なのは、HashMapを使用することです。Enumにはもっと多くのコードが含まれていますが、すべてが変更する目的が1つしかないので、より簡単にクリーナーになります。

これを行うには他にも方法がありますが、上記は既存のコードを変更しすぎないという2つの簡単な提案です。

0

を見てみましょう:

この

は、与えられたテントの一つのサンプルJavaファイルです。 obj変数はここでは無意味です)

さて、Stringは決してString[]に等しくないので、問題があります。


あなたがする必要がありますいずれか

1)を比較するために、その配列からの個々の文字列を取得し、

2)R.string資源、ないR.array

を取得

3)たぶん使いますboolean contains(String[] strings, String findMe)メソッドの実装。しかし、私はそれがあなたが示しているロジックに当てはまるかどうかわかりません

4)もっと意味があるような他の条件を使用してください... book.getSubject()のように?


オプション1、例えば... Map<String, Class>を使用して

button.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     String s0 = title_subjects[0]; // Get just the first string 

     Class clz = null; 

     if ("Soft Computing".equals(s0)) { 
      clz = pdfviewactivity.class; 
     } else if ("Web Engineering".equals(s0)) { 
      clz = pdfweben.class; 
     else if ("Network Management".equals(s0)) { 
      clz = pdfnetwork.class; 
     } else if ("Wireless Network".equals(s0)) { 
      clz = pdfwireless.class; 
     } 

     if (clz != null) { 
      Intent intent = new Intent(ActivityBookDetails.this, clz); 
      startActivity(intent); 
     } 
    } 
}); 

が長い場合-else文

関連する問題