2017-04-24 114 views
-2

我正在处理我的主要项目,并且希望我的按钮可以根据获取的字符串数组值打开不同的意图。我在按钮的OnClickListener中使用if和else if语句,但不会再点击。请帮帮我。如何在Android中按钮的OnClickListener中添加if语句

这是我的XML文件:

<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文件:

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

我想我如果其他条件的值的基础上开展工作字符串数组。

这是给定的意图的一个样本的Java文件:

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

你可能不应该尝试添加里面的条件语句例如,最简单的做法是将条件逻辑移动到另一个方法。

@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语句更好的方法。如果您计划添加更多选项,可以考虑使用枚举或映射。

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的,虽然这样做的缺点是goToNextView方法需要改变每添加新的课题时间。Enum涉及更多的代码,但更简单一点,因为所有东西都有一个改变的目的。

还有其他的方法可以做到这一点,以上只是两个简单的建议,不涉及改变太多现有的代码。

0

让我们来看看...

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

而且......

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

(注: obj变量在这里没有意义)

那么,String永远不会等于String[],所以存在这个问题。


你要么需要

1)获得这个数组个人要比较的字符串,

2)获取的R.string资源,而不是一个R.array

3)也许使用一些boolean contains(String[] strings, String findMe)方法的实现。但是,我不知道这是否适用于您所显示的逻辑

4)使用其他更有意义的条件......也许你有book.getSubject()


选项1,例如...

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

使用Map<String, Class>看起来不是很长的if-else语句清洁