2012-08-22 42 views
0

我有一個Webview,當我點擊操作欄項目時打開。 所以我有Credits和Help,當我點擊它關閉應用程序。現在,我希望它不要關閉應用程序,但要回主畫面(如應用程序啓動) 這裏是我的主要活動返回菜單從webview返回到應用程序

package com.CPTeam.VselCalc; 
import java.io.BufferedReader; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 
import com.actionbarsherlock.app.ActionBar; 
import com.actionbarsherlock.app.SherlockActivity; 
import com.actionbarsherlock.view.Menu; 
import com.actionbarsherlock.view.MenuInflater; 
import com.actionbarsherlock.view.MenuItem; 

import crakeron.vsel.calctest.R; 



import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.webkit.WebView; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.EditText; 
import android.widget.Spinner; 
import android.widget.Toast; 

    public class VselcalculatortestActivity extends SherlockActivity { 
private EditText freqbox1; 
private EditText freqbox2; 
private EditText freqbox3; 
private EditText freqbox4; 
private EditText freqbox5; 
private EditText voltbox1; 
private EditText voltbox2; 
private EditText voltbox3; 
private EditText voltbox4; 
private EditText voltbox5; 
private Spinner spinner; 

public int freq1; 
public int freq2; 
public int freq3; 
public int freq4; 
public int freq5; 
public int volt1; 
public int volt2; 
public int volt3; 
public int volt4; 
public int volt5; 

public boolean stop=false; 
public boolean freq4ornot=false; 
public boolean freq5ornot=false; 

//public String path; 

/** Called when the activity is first created. */ 

private AutoUpdateApk aua; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    aua = new AutoUpdateApk(getApplicationContext()); 

    ActionBar actionBar = getSupportActionBar(); 
    //could be used to modify actionbar if needed 





    ChangeLog cl = new ChangeLog(this); 
    if (cl.firstRun()) 
     cl.getLogDialog().show(); 

    //cl.getFullLogDialog().show(); for testing 

    freqbox1 = (EditText) findViewById(R.id.freq1); 
    freqbox2 = (EditText) findViewById(R.id.freq2); 
    freqbox3 = (EditText) findViewById(R.id.freq3); 
    freqbox4 = (EditText) findViewById(R.id.freq4); 
    freqbox5 = (EditText) findViewById(R.id.freq5); 
    voltbox1 = (EditText) findViewById(R.id.volt1); 
    voltbox2 = (EditText) findViewById(R.id.volt2); 
    voltbox3 = (EditText) findViewById(R.id.volt3); 
    voltbox4 = (EditText) findViewById(R.id.volt4); 
    voltbox5 = (EditText) findViewById(R.id.volt5); 

    spinner = (Spinner) findViewById(R.id.spinner1); 
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, 
    R.array.spinner_choices, android.R.layout.simple_spinner_item); 
    // Specify the layout to use when the list of choices appears 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    // Apply the adapter to the spinner 
    spinner.setAdapter(adapter); 

    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener(){ 
       public void onItemSelected(AdapterView <?> adapter, View v, int pos, long lng) { 
        if (pos==0){ 
         freq4ornot=false; 
         freq5ornot=false; 
         hide_row4(); 
         hide_row5(); 
         } 
        if (pos==1){ 
         freq4ornot=true; 
         freq5ornot=false; 
         show_row4(); 
         hide_row5(); 
         } 
        if (pos==2){ 
         freq4ornot=true; 
         freq5ornot=true; 
         show_row4(); 
         show_row5(); 
         } 
       } 

       public void onNothingSelected(AdapterView <?> arg0) { 
        //nothing FTM 
       } 
    }); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getSupportMenuInflater(); 
    inflater.inflate(R.menu.menu, menu); 
    return true; 
} 



public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case R.id.Changelog: 
     new ChangeLog(this).getFullLogDialog().show();; 
     return true; 

    case R.id.Help: 
     WebView webview = new WebView(this); 
     setContentView(webview); 
     webview.loadUrl("file:///android_res/raw/help.html"); 
    return true; 

    case R.id.Credits: 
     WebView webview1 = new WebView(this); 
    setContentView(webview1); 
    webview1.loadUrl("file:///android_res/raw/credits.html"); 
     return true; 


    } 
    return true; 
} 






public void show_row4(){ 
    freqbox4.setVisibility(View.VISIBLE); 
    findViewById(R.id.textView8).setVisibility(View.VISIBLE); 
    findViewById(R.id.TextView03).setVisibility(View.VISIBLE); 
    voltbox4.setVisibility(View.VISIBLE); 
    Log.d("VselCalc", "Showing row 4"); 

} 

public void hide_row4(){ 
    freqbox4.setVisibility(View.INVISIBLE); 
    findViewById(R.id.textView8).setVisibility(View.INVISIBLE); 
    findViewById(R.id.TextView03).setVisibility(View.INVISIBLE); 
    voltbox4.setVisibility(View.INVISIBLE); 
    Log.d("VselCalc", "Hiding row 4"); 
} 
public void show_row5(){ 
    freqbox5.setVisibility(View.VISIBLE); 
    findViewById(R.id.textView9).setVisibility(View.VISIBLE); 
    findViewById(R.id.TextView04).setVisibility(View.VISIBLE); 
    voltbox5.setVisibility(View.VISIBLE); 
    Log.d("VselCalc", "Showing row 5"); 

} 

public void hide_row5(){ 
    freqbox5.setVisibility(View.INVISIBLE); 
    findViewById(R.id.textView9).setVisibility(View.INVISIBLE); 
    findViewById(R.id.TextView04).setVisibility(View.INVISIBLE); 
    voltbox5.setVisibility(View.INVISIBLE); 
    Log.d("VselCalc", "Hiding row 5"); 
} 

public void button_pressed(View button) { 
    voltbox1.setText(""); 
    voltbox2.setText(""); 
    voltbox3.setText(""); 
    voltbox4.setText(""); 
    voltbox5.setText(""); 
    stop=false; 
    // 1. Grab values in textboxes freq1,2,3 (and 4 and 5, depending on Spinner value?) and store their values 
    grab_values(freq4ornot, freq5ornot); 
    // 2. Call calculate function with 3 (or 5) arguments 
    calculate(freq1, freq2, freq3, freq4, freq4ornot, freq5ornot); 
    // 3. call function to display each result in correct box, if stop=true, then all boxes will be displayed empty 
    display_volt(freq4ornot, freq5ornot); 
    if(stop==true) error_empty(); 
} 

public void grab_values(boolean freq4ornot, boolean freq5ornot){ 
    String freq1Value = freqbox1.getText().toString();//fetch what's in edittextbox and store it in a string 
    if(freq1Value.length()!=0){ 
     freq1 = Integer.parseInt(freq1Value);//transform the string into an int and store it in our variable 
     } 
    if(freq1Value.length()==0){ 
     stop=true; 
     freq1=0; 
     } 

    String freq2Value = freqbox2.getText().toString(); 
    if(freq2Value.length()!=0){ 
     freq2 = Integer.parseInt(freq2Value);//transform the string into an int and store it in our variable 
     } 
     if(freq2Value.length()==0){//check if user entered a value in box, otherwise causes crash 
     stop=true;      
     freq2=0; 
     } 

    String freq3Value = freqbox3.getText().toString(); 
    if(freq3Value.length()!=0){ 
     freq3 = Integer.parseInt(freq3Value); 
     } 
     if(freq3Value.length()==0){ 
      stop=true;      
      freq3=0; 
     } 

    if (freq4ornot==true){ 
     String freq4Value = freqbox4.getText().toString(); 
     if(freq4Value.length()!=0){ 
      freq4 = Integer.parseInt(freq4Value); 
      } 
      if(freq4Value.length()==0){ 
       stop=true;         
       freq4=0; 
      } 
    if (freq5ornot==true){ 
     String freq5Value = freqbox5.getText().toString(); 
     if(freq5Value.length()!=0){ 
      freq5 = Integer.parseInt(freq5Value); 
      } 
      if(freq5Value.length()==0){ 
       stop=true;         
       freq5=0; 
      } 

    }} 

} 

public void calculate(int freq1,int freq2, int freq3, int freq4, boolean freq4ornot, boolean freq5ornot){ 
    volt1 = formula(freq1); 
    volt2 = formula(freq2); 
    volt3 = formula(freq3); 
    if (freq4ornot==true){volt4 = formula(freq4);} 
    if (freq5ornot==true){volt5 = formula(freq5);} 
} 


public int formula(int freq){ 
    int volt = ((freq/20)+2); 
    return volt; 
} 


public void display_volt (boolean freq4ornot,boolean freq5ornot){ 
    if(stop==false){ 
     voltbox1.setText(String.valueOf(volt1)); 
     voltbox2.setText(String.valueOf(volt2)); 
     voltbox3.setText(String.valueOf(volt3)); 
     if(freq4ornot==true){voltbox4.setText(String.valueOf(volt4));} 
     if(freq5ornot==true){voltbox5.setText(String.valueOf(volt5));} 
    } 

} 


public void error_empty(){ 
    Toast.makeText(getApplicationContext(), "Please enter a frequency in all the boxes", Toast.LENGTH_LONG).show(); 
    /* For debug purposes 
    Toast.makeText(getApplicationContext(),"stop bool is " + stop, Toast.LENGTH_LONG).show();*/ 
} 








        //AUTODETECTION FUNCTIONS!!! 

private int detected_freq1; 
private int detected_freq2; 
private int detected_freq3; 
private int detected_freq4; 
private int detected_freq5; 
private String path; 

public void auto_detect(View button){ 
    stop=false; 
    freq4ornot=false; 
    freq5ornot=false; 
    //get the path string (for multiple device support) that leads to the cpu_freq file 
     {get_path();}  
    //read and process the file specified by path() and extract the frequencies   
     detect();  
    //fill the 4/5 freq boxes with the frequencies found 
     write_freq(detected_freq1,detected_freq2,detected_freq3,detected_freq4,detected_freq5); 

     if (stop==true){error_device();} 
    } 

    private void get_path(){ 
     //find path for frequencies available 
     // for Defy (and milestone, and many other android devices) it is /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies 
     // for multiple devices support, probably store the paths in a table in the future   
     path="/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies"; 

     //for testing, put a file called "Test" in the root directory of your phone to test behavior on 4/5 freqs 
     //path="/Test"; 
    } 

    private void detect(){ 
     String[] segs; 
     FileReader fstream; 
     long Read; 

     try {fstream = new FileReader(path); 
     Log.d("VselCalc_AutoD", "Opened '" + path + "' file correctly"); 
     } 
     catch (FileNotFoundException e) {    
      Toast.makeText(getApplicationContext(), "Could not read " + path, Toast.LENGTH_LONG).show(); 
      stop=true; 
      return; 
     } 

     BufferedReader in = new BufferedReader(fstream, 500); 
     String line; 
     try { 
      while ((line = in.readLine()) != null) { 

        Log.d("VselCalc_AutoD", "line read:"+ line); 
        segs = line.trim().split(" "); 
        Log.d("VselCalc_AutoD", "segs length: " + segs.length); 

        Read = Long.parseLong(segs[0]); 
        Log.d("VselCalc_AutoD", "Auto-Detect freq. Read1: " + Read); 
        detected_freq1= (int) Read/1000; 

        Read = Long.parseLong(segs[1]); 
        Log.d("VselCalc_AutoD", "Auto-Detect freq. Read2: " + Read); 
        detected_freq2= (int) Read/1000; 

        Read = Long.parseLong(segs[2]); 
        Log.d("VselCalc_AutoD", "Auto-Detect freq. Read3: " + Read); 
        detected_freq3= (int) Read/1000; 

        hide_row4(); 
        hide_row5(); 
        spinner.setSelection(0); 

        if(segs.length>=4){ 
        Read = Long.parseLong(segs[3]); 
        Log.d("VselCalc_AutoD", "Freq4 exists. Auto-Detect freq. Read4: " + Read); 
        detected_freq4= (int) Read/1000; 
        freq4ornot=true; 
        spinner.setSelection(1); 
        Log.d("VselCalc_AutoD", "freq4ornot changed to true after auto-detect"); 
        Log.d("VselCalc_AutoD", "freq5 or not: " + freq5ornot); 
        show_row4(); 
        hide_row5(); 
        } 

        if(segs.length>=5){ 
        Read = Long.parseLong(segs[4]); 
        Log.d("VselCalc_AutoD", "Freq5 exists. Auto-Detect freq. Read5: " + Read); 
        detected_freq5= (int) Read/1000; 
        freq5ornot=true; 
        spinner.setSelection(2); 
        Log.d("VselCalc_AutoD", "freq5ornot changed to true after auto-detect"); 
        show_row4(); 
        show_row5(); 
        } 


      }    
     } catch (IOException e) { 
      Log.e("readfile", e.toString()); 
     } 
     return ; 
    }      

    public void write_freq(int fr1, int fr2, int fr3, int fr4, int fr5){ 
     if(stop==false){ 
      freqbox1.setText(String.valueOf(fr1)); 
      freqbox2.setText(String.valueOf(fr2)); 
      freqbox3.setText(String.valueOf(fr3)); 
      if(freq4ornot==true){freqbox4.setText(String.valueOf(fr4));} 
      if(freq5ornot==true){freqbox5.setText(String.valueOf(fr5));} 
      Toast.makeText(getApplicationContext(), "Auto-Detection successful!", Toast.LENGTH_LONG).show(); 
     }   
    } 

    public void error_device(){ 
     Toast.makeText(getApplicationContext(), "Function may not be supported on your device. Please contact the developers", Toast.LENGTH_LONG).show(); 
    } 

}

我還沒有添加web視圖佈局/ main.xml,因爲它在我點擊所需的操作欄項目時打開。

case R.id.Help: 
    WebView webview = new WebView(this); 
    setContentView(webview); 
    webview.loadUrl("file:///android_res/raw/help.html"); 
return true; 

針對性的Android版本是4.1

回答

1

你應該在你的活動類中重寫onBackPressed()

public void onBackPressed() 

因爲:當活動已經檢測到用戶的 按返回鍵調用API 5級。默認實現只是完成當前活動,但您可以覆蓋它以執行任何您想要的操作。

將此代碼複製到您的活動中,並做任何您想要的操作。

@Override 
    public void onBackPressed() { 
     // TODO Auto-generated method stub 
      //this is where you start your activity 
    } 
+0

怎麼樣?寫什麼? 你能更詳細嗎? –

+0

看到我上面的編輯... –

+0

我之前做過..但我想回到應用程序。不要關閉它。我嘗試了各種解決方案,但總是得到FC! 我編輯的問題與我的webview的代碼片。 「 –

1

當按下返回按鈕時,當前意圖/活動被關閉並返回到堆棧中的前一個意圖/活動。在這裏您正在創建一個webview,並將其設置爲當前活動的的內容。因此,當您按下後,該活動就會關閉,這會關閉應用程序,因爲您之前沒有任何意圖/活動。而是重寫onBackPressed,並將setContentView作爲主佈局。

@Override 
    public void onBackPressed() { 
     // TODO Auto-generated method stub 
      setContentView(R.layout.main); 
      //Do other functions you want to do here 
    } 
+0

我已經這樣做了,但我不能退出主菜單中的應用程序..它會不斷重新啓動活動 –

+0

您想要重新啓動活動或返回上一頁(R.layout.main),您想要什麼? – SKT

+0

我想返回到r.layout.main但只有從這兩個webivews。我的應用程序不是所有的webview ..它有很多的按鈕,spinners menus..and我添加webview的幫助和學分 –