【问题标题】:Add a switch statement to Navigation Drawer向导航抽屉添加 switch 语句
【发布时间】:2014-02-21 12:54:25
【问题描述】:

我正在学习一般的 android 和 java 编程,需要一些关于 android 上的“导航抽屉”的帮助。

我正在努力将 switch 语句添加到抽屉项目的单击侦听器中,我使用的代码取自此处的示例:http://hmkcode.com/android-creating-a-navigation-drawer/

我应该如何处理 switch 语句以便通过触摸其中一个项目来启动新的活动?

谢谢

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    // Sync the toggle state after onRestoreInstanceState has occurred.
     actionBarDrawerToggle.syncState();
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    actionBarDrawerToggle.onConfigurationChanged(newConfig);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

     // Call ActionBarDrawerToggle.onOptionsItemSelected(), if it returns true
    // then it has handled the app icon touch event

    if (actionBarDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

private class DrawerItemClickListener implements ListView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView parent, View view, int position, long id) {
        Toast.makeText(MainActivity.this, ((TextView)view).getText(), Toast.LENGTH_LONG).show();
        drawerLayout.closeDrawer(drawerListView);

    }
}

编辑....

public void onItemClick(AdapterView parent, View view, int position, long id) {

switch (position){
    case 0:
       new DataTask(this).execute();
       MainActivity.this.finish();//Set this Activity to Finish so no loop back       
       Intent intent=new Intent(MainActivity.this,SplashScreen.class);
       startActivity(intent);
       System.out.println("Click working");
    case 1:
        //do stuff
    default:
        break;
}

新的DataTask(this).execute(); 发出此警告......构造函数 DataTask(MainActivity.DrawerItemClickListener) 未定义。我不确定为什么?

DataTask 类...

public class DataTask extends AsyncTask<Void, Void, Integer> {

     Context context;
        DataTask(Context context) {    
             this.context = context.getApplicationContext();  
        }
     // Global Int for counting how many Tasks have been completed
        int asynCount = 0;

        ArrayList<String> arr_dataVts=new ArrayList<String>();
        ArrayList<String> arr_dataNtm=new ArrayList<String>();
        ArrayList<String> arr_dataOdas=new ArrayList<String>();
        ArrayList<String> arr_dataMetAll=new ArrayList<String>();
        ArrayList<String> arr_dataMet3HrTask=new ArrayList<String>();
        ArrayList<String> arr_dataTideTask=new ArrayList<String>();

    @Override
    protected Integer doInBackground(Void... params) {

         //VtsAsyncTask
        VtsTask task1 = new VtsTask();
        task1.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        //NtmAsyncTask
        NtmTask task2 = new NtmTask();
        task2.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        //OdasAsyncTask
        OdasTask task3 = new OdasTask();
        task3.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        //MetAllTask
        MetAllTask task4 = new MetAllTask();
        task4.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        //Met3HrTask
        Met3HrTask task5 = new Met3HrTask();
        task5.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        //TideTask
        TideTask task6 = new TideTask();
        task6.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);

        return 1;
    }

private class VtsTask extends AsyncTask<Void, Void, ArrayList<String>> {

        @Override
        protected ArrayList<String> doInBackground(Void... params) {

            Document docVTS;
            try { 
                Connection.Response response = Jsoup.connect("https://vts.mhpa.co.uk/main_movelistb.asp")
                    .timeout(10000)
                    .ignoreHttpErrors(true)
                    .execute();

            int statusCode = response.statusCode();
                if(statusCode == 200) {

                docVTS = Jsoup.connect("https://vts.mhpa.co.uk/main_movelistb.asp").timeout(10000).get(); 

                Elements tableRows = docVTS.select("table.dynlist td:eq(0),td:eq(1),td:eq(3),td:eq(4),td:eq(7),td:eq(8)");
                  tableRows.size();
                    for(int i = 1; i < 80; i++){// Only allows x results from VTS list, from 1 not 0. 0 produces needless results
                      String shippingList = tableRows.get(i).text() +"\n";//new line

                      arr_dataVts.add(shippingList);// Add value to ArrayList
                  };  
                }   else {
                    //If can't connect for what ever reason
                      System.out.println("Received error code for VTS list Data : " + statusCode + " Adding Null values");
                      for(int i = 1; i < 80; i++){
                             arr_dataVts.add("No Data" + i);
                       }
                   }
                }
               catch (IOException e) {
                    e.printStackTrace();
                    System.out.println("Received timeout error code for VTS list Data : Adding Null values ");
                        for(int i = 1; i < 80; i++){
                             arr_dataVts.add("No Data" + i);                            
                             }
               }
                return arr_dataVts;
            }
             @Override
             protected void onPostExecute(ArrayList<String> Param) {
                  asynCount++;
                  System.out.println("Vts list Captured" + arr_dataVts + " asynCount= " + asynCount);
                  if (asynCount == 6){
                         //Start intents for main activity
                        System.out.println("asynCount has reached= " + asynCount + " so now starting MainActivity");
                          Intent intent = new Intent(context, MainActivity.class); 
                          intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
                          intent.putStringArrayListExtra("data1", arr_dataVts);
                          intent.putStringArrayListExtra("data2", arr_dataNtm);
                          intent.putStringArrayListExtra("data3", arr_dataOdas);
                          intent.putStringArrayListExtra("data4", arr_dataMetAll);
                          intent.putStringArrayListExtra("data5", arr_dataMet3HrTask);
                          intent.putStringArrayListExtra("data6", arr_dataTideTask);
                          context.startActivity(intent);    
                     }else{
                       //update dialogue
                     }
            }
    }

private class NtmTask extends AsyncTask<Void, Void, ArrayList<String>> {

        @Override
        protected ArrayList<String> doInBackground(Void... params) {

        Document docNTM;
        try {
            Connection.Response response = Jsoup.connect("http://www.milfordfishdocks.com/notices-to-mariners/")
                    .timeout(10000)
                    .ignoreHttpErrors(true)
                    .execute();

            int statusCode = response.statusCode();
                if(statusCode == 200) {

            docNTM = Jsoup.connect("http://www.milfordfishdocks.com/notices-to-mariners/").timeout(10000).get();

            Elements elements = docNTM.select("div.news-item-left");
               int NtmAmount = elements.size();
               String NtmAmt = Integer.toString(NtmAmount);//convert the Int to a string for adding into array
               arr_dataNtm.add(NtmAmt);
        } else {  
            System.out.println("Received error code for NTM Data : " + statusCode + " Adding Null values");
            arr_dataNtm.add("0");
               }
        }          
     catch (IOException e) {
         e.printStackTrace();
         System.out.println("Received timeout error code for NTM Data : Adding Null values ");
         arr_dataNtm.add("0");
        }

        return arr_dataNtm;
    }
             @Override
             protected void onPostExecute(ArrayList<String> Param) {
                 asynCount++;
                 System.out.println("Ntm list Captured" + arr_dataNtm + " asynCount= " + asynCount);
                 if (asynCount == 6){
                     //Start intents for main activity
                    System.out.println("asynCount has reached= " + asynCount + " so now starting MainActivity");
                      Intent intent = new Intent(context, MainActivity.class); 
                      intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
                      intent.putStringArrayListExtra("data1", arr_dataVts);
                      intent.putStringArrayListExtra("data2", arr_dataNtm);
                      intent.putStringArrayListExtra("data3", arr_dataOdas);
                      intent.putStringArrayListExtra("data4", arr_dataMetAll);
                      intent.putStringArrayListExtra("data5", arr_dataMet3HrTask);
                      intent.putStringArrayListExtra("data6", arr_dataTideTask);
                      context.startActivity(intent);    
                 }else{
                   //update dialogue
                 }
             }
    }
@Override
     protected void onPostExecute(Integer result) {
        System.out.println("Data Task Has Executed");
    }
}

【问题讨论】:

  • 你能展示你的 DataTask 类吗?
  • 无法将其全部添加到 large 但希望您能看到发生了什么......

标签: java android switch-statement navigation-drawer


【解决方案1】:

可以这样做:

private class DrawerItemClickListener implements ListView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView parent, View view, int position, long id) {
        switch (position){
            case 0:
                //do stuff
            case 1:
                //do stuff
            default:
                break;
        }
        drawerListView.setItemChecked(position, true);
        drawerListView.setSelection(position);
        drawerLayout.closeDrawer(drawerListView);

    }
}

然后只需将此侦听器附加到您的 NavList:

drawerListView.setOnItemClickListener(new DrawerItemClickListener());

顺便说一句,你会建议你切换片段而不是切换活动,"Creating a Navigation Drawer" 教程解释了如何使用它们

编辑处理case 0,替换为以下内容:

new DataTask(MainActivity.this).execute();      
Intent intent=new Intent(MainActivity.this,SplashScreen.class);
startActivity(intent);
Log.d("Click working");
MainActivity.this.finish();//Set this Activity to Finish so no loop back 

【讨论】:

  • 您好,感谢您的快速回答...但我收到此警告(检查问题更新)...而且它似乎没有注册点击事件..
  • 查看我的编辑,您的 this 正在引用 OnClickListener
  • 不幸的是,这似乎不起作用,(getActivity()) 引用的是什么?
  • 哎呀,打错了,检查修复
  • 感谢您对它进行了排序,但由于某种原因,点击仍然没有启动意图,就像它没有注册一样,感谢您迄今为止的帮助。
【解决方案2】:
Switch=
(Switch)navigationView.getMenu().findItem(R.id.vibrate).getActionView();
s.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean 
isChecked){
            if(isChecked)
                //do whatever you want to do
        }
    });

这应该可以工作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多