안드로이드 개발 질문/답변
(글 수 45,052)
제목그대로 TabHost 내의 FrameLayout에서 Intent를 하려고 하는데
사실 ListviewActivity 를 Intent하여 초기화면을 띄우는데 까지는 성공을 하였습니다.
헌데 이 listview에서 onItemClick리스너와 콜백메소드를 쓰려고 했습니다.
해당 아이템을 클릭하게되면 그 index의 정보가 다음 activity로 가서 이를 이용 새로운 Activity를 Framelayout에 그대로 띄울려고 했습니다.
헌데 생각해보니 이게 한번은 tab생성을위해 intent되었다지만 그다음 다시 intent될때 tab이 살아있을지도 의문이였는데
심지어 아에 intent안되고 무반응을 하네요
소스는 아래와 같습니다..
좀더 소스에대해 설명붙이자면 sdcard에 등록된 txt파일 이름중 "1"로시작되는 파일을 adapter에 추가하고 이를 list로 나타내고 이 정보를 다시 다음 activity로 보내서 다시 파일을 사용하려고 했습니다....
불가능한건가요???? 불가능은 둘째치고 왜 아에 반응을 하지 않을까요... itemclick 시에..
혼자하니 참 여러군데서 조근조근 다막힙니다. ㅠㅠ
사실 ListviewActivity 를 Intent하여 초기화면을 띄우는데 까지는 성공을 하였습니다.
헌데 이 listview에서 onItemClick리스너와 콜백메소드를 쓰려고 했습니다.
해당 아이템을 클릭하게되면 그 index의 정보가 다음 activity로 가서 이를 이용 새로운 Activity를 Framelayout에 그대로 띄울려고 했습니다.
헌데 생각해보니 이게 한번은 tab생성을위해 intent되었다지만 그다음 다시 intent될때 tab이 살아있을지도 의문이였는데
심지어 아에 intent안되고 무반응을 하네요
소스는 아래와 같습니다..
좀더 소스에대해 설명붙이자면 sdcard에 등록된 txt파일 이름중 "1"로시작되는 파일을 adapter에 추가하고 이를 list로 나타내고 이 정보를 다시 다음 activity로 보내서 다시 파일을 사용하려고 했습니다....
불가능한건가요???? 불가능은 둘째치고 왜 아에 반응을 하지 않을까요... itemclick 시에..
혼자하니 참 여러군데서 조근조근 다막힙니다. ㅠㅠ
package com.inhatc.Project;
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FilenameFilter; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList;
import com.inhatc.Project.R; import android.app.Activity; import android.app.ListActivity; import android.content.Intent; import android.content.res.Resources; import android.os.Bundle; import android.os.Environment; import android.view.View; import android.widget.Adapter; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; import android.widget.AdapterView.OnItemClickListener;
public class tab1 extends Activity implements OnItemClickListener{
int fileName=0;
ListView lstview;
ArrayList<String> arraylst;
ArrayAdapter<String> arrayadt;
BufferedReader br;
String[] txtList;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tab1);
lstview = (ListView)findViewById(R.id.tab1list);
arraylst = new ArrayList<String>();
arrayadt = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,arraylst);
lstview.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
lstview.setAdapter(arrayadt);
String sdPath = Environment.getExternalStorageDirectory().getAbsolutePath();
File sdFile = new File(sdPath);
FilenameFilter filter = new FilenameFilter(){
@Override
public boolean accept(File dir, String filename) {
// TODO Auto-generated method stub
return filename.startsWith("1");
};
};//FilenameFilter
txtList = sdFile.list(filter);
try {
for(int i=0;i<txtList.length;i++){
String sb = null;
br = new BufferedReader(new InputStreamReader(new FileInputStream(sdPath+"/"+txtList[i]),"EUC-KR"));
sb=br.readLine();
arrayadt.add(sb);
}
br.close();
}//try
catch (Exception e) {
Toast.makeText(this, "읽기오류 : " + e, 4000) .show();
}
arrayadt.notifyDataSetChanged();
}//onCreate
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
// TODO Auto-generated method stub
Intent intent = new Intent(this, InfoView.class);
intent.putExtra("filename", txtList[arg2]);
startActivity(intent);
}//onItemClick
}//Activity




2. Tab Host를 가진 Activity에서 broadcast를 수신한다.
3. Tab 을 이동한다.
저같은경우 FrameLayout에서 떠야 하는 모든 Activity를 탭에 추가하고 탭쪽에 안보여야 하는 것들은
indicator만 안보이게 했습니다. 이게 되돌아오는쪽이 좀 문제이긴 한데...
전체 Activity의 흐름을 그림으로 그리신 다음에... "뒤로가기"시 분기되는 것이 없다면 (앞으로 가는쪽은 상관없습니다.)
그냥 저처럼 하셔도 됩니다. A에서 B로 왔을때 A로 다시 가려면 그냥 A로 가면되거든요.... finish나 별도 스택관리 안해도 됩니다.
B에서 A로 결과를 보내는 형태도 Broadcast로 해결할 수 있습니다.
A 로 이동한 다음에 결과를 Broadcast해도 되고... 그 반대로 해도 됩니다만...
A의 생명주기에 따른 Receiver관리에 주의만 하면 됩니다.