안드로이드 개발 질문/답변
(글 수 45,052)
현재 리스트액티비티를 통해서
특정함수 클릭시 특정 경로의 파일들을 출력하게 되고
마찬가지로 같은 액티비티내의 특정함수 클릭시 특정함수 클릭시 특정 경로의 파일들을 출력하게 됩니다.
즉, 동일 액티비티의 내용이 변경되는것인데요
이경우, 핸드폰 단말기의 뒤로가기 버튼을 누르게 될경우 기존액티비티의 내용이 나타나지 않고
그냥 액티비티가 종료되어 버리게 됩니다.
지금현재 FTP서버에 접속해서 파일들을 재귀함수를 통해서 리스트화 시키는 작업에 있는데
문제는 재귀함수를 통해서 한액티비티안에 파일들을 다시 리스트시켜주니까 뒤로가기 버튼을 누르면
기존 경로의 내용들이 출력되는것이 아니라 아예 액티비티자체가 종료되어 버리는것이 문제점입니다.
나름대로 고심해본다고 지금 하고있는데 진척상황이 없으니 답답해 죽을것같네여;;
혹시 모르니 소스코드 첨부하겠습니다.
public class Filelist01Activity extends ListActivity {
private List<String> item = null;
private List<String> path = null;
private TextView myPath;
FTPClient con;
FTPFile[] files;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myPath = (TextView)findViewById(R.id.path);
Log.v("HES","접속시도");
try{
Log.v("HES","Before Connect");
con = new FTPClient();
Log.v("HES","클라이언트생성");
con.connect("ftp.imrc.kist.re.kr", 21);
con.login("gre_kist", "gre1003");
con.enterLocalPassiveMode();
con.setFileType(con.BINARY_FILE_TYPE);
Log.v("HES","End Connect");
}catch(Exception e){
e.printStackTrace();
}
Log.v("HES","접속완료");
getDir("/");
}
private void getDir(String dirPath){
try{
con.changeWorkingDirectory(dirPath);
files=con.listFiles();
myPath.setText("Location: " + dirPath);
item = new ArrayList<String>();
path = new ArrayList<String>();
FTPFile[] files = con.listFiles();
if(!dirPath.equals("/")){
item.add("/");
path.add("/");
item.add("../");
path.add(con.getStatus());
}
Log.v("HES","Test1");
for(int i=0; i < files.length; i++){
//File file = files[i];
path.add(con.getStatus(dirPath).toString());
if(files[i].isDirectory())
{
item.add(files[i].getName() + "/");
}
else
item.add(files[i].getName().toString());
}
Log.v("HES","Test2");
ArrayAdapter<String> fileList =new ArrayAdapter<String>(this, R.layout.row, item);
setListAdapter(fileList);
Log.v("HES","Test3");
}catch(Exception e)
{
e.printStackTrace();
}
}
protected void onListItemClick(ListView l, View v, int position, long id){
if (files[position].isDirectory()){//폴더일경우
if(files[position].getSize()!=0){
getDir(files[position].getName().toString());
}
else{
new AlertDialog.Builder(this).setIcon(R.drawable.icon).setTitle("[" + files[position].getName() + "] folder can't be read!")
.setPositiveButton("OK",new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which) {
}
}).show();
}
}
else{
new AlertDialog.Builder(this)
.setIcon(R.drawable.icon)
.setTitle("[" + files[position].getName() + "]")
.setPositiveButton("OK",new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which){
}
}).show();
}
}
}
private List<String> item = null;
private List<String> path = null;
private TextView myPath;
FTPClient con;
FTPFile[] files;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myPath = (TextView)findViewById(R.id.path);
Log.v("HES","접속시도");
try{
Log.v("HES","Before Connect");
con = new FTPClient();
Log.v("HES","클라이언트생성");
con.connect("ftp.imrc.kist.re.kr", 21);
con.login("gre_kist", "gre1003");
con.enterLocalPassiveMode();
con.setFileType(con.BINARY_FILE_TYPE);
Log.v("HES","End Connect");
}catch(Exception e){
e.printStackTrace();
}
Log.v("HES","접속완료");
getDir("/");
}
private void getDir(String dirPath){
try{
con.changeWorkingDirectory(dirPath);
files=con.listFiles();
myPath.setText("Location: " + dirPath);
item = new ArrayList<String>();
path = new ArrayList<String>();
FTPFile[] files = con.listFiles();
if(!dirPath.equals("/")){
item.add("/");
path.add("/");
item.add("../");
path.add(con.getStatus());
}
Log.v("HES","Test1");
for(int i=0; i < files.length; i++){
//File file = files[i];
path.add(con.getStatus(dirPath).toString());
if(files[i].isDirectory())
{
item.add(files[i].getName() + "/");
}
else
item.add(files[i].getName().toString());
}
Log.v("HES","Test2");
ArrayAdapter<String> fileList =new ArrayAdapter<String>(this, R.layout.row, item);
setListAdapter(fileList);
Log.v("HES","Test3");
}catch(Exception e)
{
e.printStackTrace();
}
}
protected void onListItemClick(ListView l, View v, int position, long id){
if (files[position].isDirectory()){//폴더일경우
if(files[position].getSize()!=0){
getDir(files[position].getName().toString());
}
else{
new AlertDialog.Builder(this).setIcon(R.drawable.icon).setTitle("[" + files[position].getName() + "] folder can't be read!")
.setPositiveButton("OK",new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which) {
}
}).show();
}
}
else{
new AlertDialog.Builder(this)
.setIcon(R.drawable.icon)
.setTitle("[" + files[position].getName() + "]")
.setPositiveButton("OK",new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which){
}
}).show();
}
}
}




public void onBackPressed(){};
함수 오버라이딩 하셔서.. back key를 눌렀을 경우 하시고 싶은 행동을 하시면 될듯 합니다.
예를 들어,
함수1의 내용 출력 한 다음 특정 행동을 통해 함수2의 내용을 출력하게 된 경우
함수1의 출력 내용을 변수에 담아놓은 다음 함수2의 내용 출력한 다음 back key를 눌렀을 때 변수에 저장해 놓은 내용을
출력하면 되겠지요..
이 함수에서 super.onBackPressed()를 호출 하면 해당 activity는 종료되게 됩니다.