【问题标题】:What is the correct way implement switch case statement in Android?在Android中实现switch case语句的正确方法是什么?
【发布时间】:2013-06-22 13:57:32
【问题描述】:

它没有显示任何错误。但是,当我运行我的应用程序时,我的 listView 中没有出现任何结果。我认为,错误是因为我没有使用正确的方式来做 switch case 语句。这是我的代码。

快速搜索.java

    package com.example.awesome;

    import java.io.IOException;
    import android.os.Bundle;
    import android.app.Activity;
    import android.content.Intent;
    import android.database.SQLException;
    import android.util.Log;
    import android.view.Menu;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;

    public class QuickSearch extends Activity implements OnClickListener {

        @Override
        protected void onCreate(Bundle savedInstanceState) {

   //-------------------------------------------------------------------------
            // Initiate database data    
                initiateDb();
   //---------------------------------------------------------------------------
            // Declaration of view
                final Button qsfaculty, qscollege;          
                super.onCreate(savedInstanceState);
                setContentView(R.layout.quick_search);

   //---------------------------------------------------------------------------
            // Get reference
                qsfaculty = (Button) this.findViewById(R.id.button1);
                qsfaculty.setOnClickListener(this);
                qscollege = (Button) this.findViewById(R.id.button2);
                qscollege.setOnClickListener(this);
        }        
                 public void onClick(View v) {
                    char ch = 0;
                        View qsfaculty = null;
                        View qscollege = null;
                        if(v == qsfaculty){
                            ch = 'a';
                        }
                        else if (v == qscollege)
                            {ch = 'b';}
                    Intent i = new Intent(this,SearchLocation.class);
                    i.putExtra("value",ch);
                    startActivity(i);
                    }
    //---------------------------------------------------------------------------
   // Initiate database data
        public void initiateDb() {
            DatabaseHandler myDbHandler =  new DatabaseHandler(this);

            try {
                myDbHandler.createDataBase();
            } 
            catch (IOException ioe) {
                throw new Error("Unable to create database");
            }

            try {
                myDbHandler.openDataBase();
            }
            catch(SQLException sqle) {
                throw sqle;
            }
            Log.d("Initiate", "UKM Location Count: " + myDbHandler.getUkmLocationCount());
            myDbHandler.close();
        }
       //------------------------------------------------------------------------------ 
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.quick_search, menu);
            return true;
        }

    }

SearchLocation.java

package com.example.awesome;

import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.app.Activity;
import android.app.ListActivity;
import android.content.Intent;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class SearchLocation extends ListActivity {

    //------------------------------------------------------------------
        // Declaration
        public static UkmLocation selectedPOI = null;
        final DatabaseHandler db = new DatabaseHandler(this);
        private EditText filterText = null;
        ArrayAdapter<String> adapter = null;
        final ArrayList<String> results = new ArrayList<String>();
        final ArrayList<String> results_id = new ArrayList<String>();

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.search_location);
            final Intent c = new Intent(SearchLocation.this, LocationDetail.class);

//------------------------------------------------------------------
        // Link editText to layout item
        filterText = (EditText) findViewById(R.id.search_box);
        filterText.addTextChangedListener(filterTextWatcher);

//------------------------------------------------------------------
       // Reading Poi                   
    Log.d("Reading", "Reading all Kategori ..");
    int value = 0;
    switch(value) {
       case 'a' : 
        List<UkmLocation> faculty = db.getCategoryFaculty(); 
        for(UkmLocation k : faculty) {
                   results.add(k.getName());
                   results_id.add(k.getID());
         }
         break;
    case 'b' : 
        List<UkmLocation> college = db.getCategoryCollege(); 
        for(UkmLocation k : college) {
            results.add(k.getName());
            results_id.add(k.getID());
        }
        break;
        }


    //------------------------------------------------------------------
    // Set list arrayAdapter to adapter
    adapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.textView1,results);       
            setListAdapter(adapter);

     //------------------------------------------------------------------
      // Set ListView from ListActivity
          ListView lv = getListView();
          lv.setTextFilterEnabled(true);

     //------------------------------------------------------------------
       // Set click event from listView
          lv.setOnItemClickListener(new OnItemClickListener() {
          public void onItemClick(AdapterView<?> parent, View view, 
                        int position, long id) {
                  // When clicked, show a toast with the TextView text
                  Toast.makeText(getApplicationContext(), ((TextView) view).getText(),
                      Toast.LENGTH_SHORT).show();

                  Log.d("test", "position:" + position);

                  Log.d("test", "actualname:" + db.getUkmLocationByName(adapter.getItem(position)).getName());              

                  // String poiID = results_id.get(position);
                  String poiID = db.getUkmLocationByName(adapter.getItem(position)).getID();
                  setSelectedPoi(poiID);
                  startActivity(c);
                }
            });        
  }

    private TextWatcher filterTextWatcher = new TextWatcher() {

    public void afterTextChanged(Editable s) {
            }

    public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {

            }

            public void onTextChanged(CharSequence s, int start, int before,
                    int count) {
                adapter.getFilter().filter(s);
            }       
        };

        @Override
        protected void onDestroy() {
            super.onDestroy();
            filterText.removeTextChangedListener(filterTextWatcher);
        }

        public UkmLocation getSelectedPoi() {
            return selectedPOI;
        }

        public void setSelectedPoi(String poiID) {
            selectedPOI = db.getUkmLocation(poiID);
            Log.d("test2", "_id:" + db.getUkmLocation(poiID).getID());
            Log.d("test2", "Name:" + db.getUkmLocation(poiID).getName());
            // Closing db
            db.close();
        }
}

我认为,QuickSearch.java 中的 if else 语句已经是正确的。 SearchLocation.java 的 switch case 语句中的问题 请帮我解决这个问题。

【问题讨论】:

    标签: android listview button switch-statement


    【解决方案1】:
    int value = 0;
    switch(value) {
    

    你正在设置你切换到 0 的值,所以它相当于做switch(0) {...

    找出value 应该是什么并正确初始化它。

    另外,value 的类型为 int,但您的 switch 使用 chars('a''b'),因此您需要将值设为 char 并正确初始化它或者让它成为int,正确初始化它并更改您的switch 案例以使用ints。

    【讨论】:

    • 感谢您的回复。 :) 我已经找到了解决方案。看看我下面的新帖子
    【解决方案2】:

    首先你做int value = 0;所以值是0。所以它不是'a'也不是'b'。

    【讨论】:

    • 感谢您的回复。 :) 我已经找到了解决方案。在这里查看我的新帖子
    【解决方案3】:

    你必须从意图中获得价值,因为你把它放在额外的东西中。 i.putExtra("value",ch);

    类似

    char value;
    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        value = extras.getIntgetChar("value");
    }
    

    【讨论】:

    • 感谢您的回复。 :) 我已经找到了解决方案。在这里查看我的新帖子
    【解决方案4】:

    在这里,我已经解决了我的问题..

    QuickSearch.java

    public void onClick(View v) {
                    int ch = 0;
                        /*View qsfaculty = null;
                        View qscollege = null;*/
                        if(v == qsfaculty){
                            ch = '1';
                        }
                        else if (v == qscollege)
                            {ch = '2';}
                    Intent i = new Intent(this,SearchLocation.class);
                    i.putExtra("value",ch);
                    startActivity(i);
                    }
    

    SearchLocation.java

    Bundle extras = getIntent().getExtras();
                  int value = extras.getInt("value");
    
                  switch(value) {
                  case '1' : 
                      List<UkmLocation> faculty = db.getCategoryFaculty(); 
                      for(UkmLocation k : faculty) {
                            results.add(k.getName());
                            results_id.add(k.getID());
                        }
                      break;
                  case '2' : 
                      List<UkmLocation> college = db.getCategoryCollege(); 
                      for(UkmLocation k : college) {
                            results.add(k.getName());
    
        results_id.add(k.getID());
                        }
                      break;
                  }
    

    【讨论】:

    • 为什么要将字符文字('1''2')分配给int 变量?我强烈建议您将'1' 更改为1。更好的是,创建常量,为这些值赋予名称和含义。
    猜你喜欢
    • 2019-04-07
    • 2016-06-27
    • 1970-01-01
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-28
    • 2010-10-04
    相关资源
    最近更新 更多