2012-04-03 34 views
0

我創建了一個名爲viewActivity的活動。它顯示Windows系統中的共享文件和文件夾。我使用jcifs.smb包中的函數listFiles()。最初顯示共享驅動器。我已經做出了遞歸調用listFiles()函數的選項。這是當我點擊驅動器中的特定文件夾時,文件的內容顯示。當我再次單擊位於上一個文件夾內的文件夾時,其內容也會顯示出來。這裏的問題是當我在android中按下後退按鈕時,它會調用前一個活動,而不是返回到上一個文件夾。那麼如何實現這個功能呢?如何回到以前的活動狀態?

//my package 
package com.android.accesspc; 

import java.net.MalformedURLException; 
import jcifs.smb.NtlmPasswordAuthentication; 
import jcifs.smb.SmbException; 
import jcifs.smb.SmbFile; 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.LinearLayout; 
import android.widget.ScrollView; 
import android.widget.Toast; 

public class viewActivity extends Activity{ 

int id=0; 
SmbFile previous=null; 
int count=0; 
void list(SmbFile obj) 
{ 
    ScrollView sv = new ScrollView(this); 
    LinearLayout layout=new LinearLayout(this); 
    layout.setOrientation(0x00000001); 
    try 
    { 
     SmbFile a[]=obj.listFiles(); 
     for(final SmbFile m:a) 
     { 
      if(!m.isHidden()) 
      { 
       Button btn = new Button(this); 
       btn.setId(id); 
       if(m.isDirectory()) 
       { 
        btn.setText(m.getName().replace("/","")); 
        btn.setTextSize((float)20); 
        btn.setOnClickListener(new 
        View.OnClickListener() 
        { 
         public void onClick(View v) 
         { 
       previous=m;//used to hold previous smb object 
       count++;//takes count of no of folders pressed 
          list(m); 
         } 
        }); 
       } 
       else 
       { 
        btn.setText(m.getName()); 
       } 
       layout.addView(btn); 
       id++; 
      } 
     } 
     sv.addView(layout); 
     setContentView(sv); 
    } 
    catch(SmbException e) 
    { 
Toast displayMsg=Toast.makeText(this,"cannot list files",Toast.LENGTH_SHORT); 
     displayMsg.show(); 
    } 
} 

String ip,name,password; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.view); 

    ip="192.168.0.100";//my ip address 
    name="abc";//my windows username 
    password="abcd";//my windows password 

    SmbFile dir=null; 
    String url= "smb://" + ip + "/"; 
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(null, name, password); 
    try 
    { 
     dir = new SmbFile(url, auth); 
    } 
    catch (MalformedURLException e1) 
    { 
    Toast displayMsg=Toast.makeText(this,"Network error",Toast.LENGTH_SHORT); 
     displayMsg.show(); 
    } 
    //used to list files and folders of smb object initially 
    list(dir); 
} 

@Override 
public void onBackPressed() { 
    // TODO Auto-generated method stub 
    if(!(count==0)) 
    { 
     //if count is not 0,that means the user has clicked a folder 
    //we have "previous" holding previous smb value which has to be called now 
     list(previous); 
    } 
    else 
    { 
     //the default behaviour 
     super.onBackPressed(); 
    } 
} 

} 
+0

對不起。感謝您的指導。 – raghs 2012-04-03 15:43:12

回答

1

重寫super.onBackPressed()

@Override 
public boolean onBackPressed(){ 

//your code 
} 

應在2.3.3

+0

hai謝謝你的回覆。我已經實現了它。但它不工作。請看看我的代碼,並請說出您的意見。 – raghs 2012-04-03 15:23:11

1

你需要重寫後退按鈕的行爲:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     //your code here 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 
+0

但是這段代碼在android 2.3.3 – raghs 2012-04-03 14:57:58

0

只需撥打finish()上點擊。

0
//my package 
package com.android.accesspc; 

import java.net.MalformedURLException; 
import jcifs.smb.NtlmPasswordAuthentication; 
import jcifs.smb.SmbException; 
import jcifs.smb.SmbFile; 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.LinearLayout; 
import android.widget.ScrollView; 
import android.widget.Toast; 

public class viewActivity extends Activity{ 

int id=0; 
SmbFile previous=null; 
int count=0; 
void list(SmbFile obj) 
{ 
    ScrollView sv = (ScrollView) findViewById(R.id.scrollview); 
    LinearLayout layout= (LinearLayout) findViewById(R.id.linearlayout); 
    //layout.setOrientation(0x00000001); set this in your xml file 
    try 
    { 
     SmbFile a[]=obj.listFiles(); 
     for(final SmbFile m:a) 
     { 
      if(!m.isHidden()) 
      { 
       Button btn = new Button(this); 
       btn.setId(id); 
       if(m.isDirectory()) 
       { 
        btn.setText(m.getName().replace("/","")); 
        btn.setTextSize((float)20); 
        btn.setOnClickListener(new 
        View.OnClickListener() 
        { 
         public void onClick(View v) 
         { 
       previous=m;//used to hold previous smb object 
       count++;//takes count of no of folders pressed 
          list(m); 
         } 
        }); 
       } 
       else 
       { 
        btn.setText(m.getName()); 
       } 
       layout.addView(btn); 
       id++; 
      } 
     } 
    } 
    catch(SmbException e) 
    { 
Toast displayMsg=Toast.makeText(this,"cannot list files",Toast.LENGTH_SHORT); 
     displayMsg.show(); 
    } 
} 

String ip,name,password; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.view); 

    ip="192.168.0.100";//my ip address 
    name="abc";//my windows username 
    password="abcd";//my windows password 

    SmbFile dir=null; 
    String url= "smb://" + ip + "/"; 
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(null, name, password); 
    try 
    { 
     dir = new SmbFile(url, auth); 
    } 
    catch (MalformedURLException e1) 
    { 
    Toast displayMsg=Toast.makeText(this,"Network error",Toast.LENGTH_SHORT); 
     displayMsg.show(); 
    } 
    //used to list files and folders of smb object initially 
    list(dir); 
} 

@Override 
public void onBackPressed() { 
    // TODO Auto-generated method stub 
    if(!(count==0)) 
    { 
     //if count is not 0,that means the user has clicked a folder 
    //we have "previous" holding previous smb value which has to be called now 
     list(previous); 
    } 
    else 
    { 
     //the default behaviour 
     super.onBackPressed(); 
    } 
} 

} 

工作,這是你的佈局XML文件(名爲view.xml用)看起來像這樣(/ res/layout/view.xml)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

<ScrollView android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@+id/scrollview"> 
<LinearLayout 
    android:id="@+id/linearlayout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> </LinearLayout> 


</ScrollView> 

</LinearLayout>