2012-04-03 4 views
0

Я создал действие, называемое viewActivity. Он отображает общие файлы и папки в системе Windows. Я использую функцию listFiles() из пакета jcifs.smb. Сначала отображаются общие диски. Я сделал вариант для вызова функции 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

ответ

1

Переопределение super.onBackPressed()

@Override 
public boolean onBackPressed(){ 

//your code 
} 

должны работать на 2.3.3

+0

hai благодарит за ответ. Я его реализовал. Но это не работает. Пожалуйста, посмотрите мой код и, пожалуйста, скажите свое мнение. – raghs

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

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> 
Смежные вопросы