안드로이드 개발 질문/답변
(글 수 45,052)
setting 액티비티에다가 단순히 listview 만 만들어 놓고,
main 액티비티에서 intent 시켰는데, 버튼을 클릭하니 앱이 죽습니다
매니페스트에 setting 에 관한 것은 다 넣었구요.
제가 로그캣 읽기를 잘못해서;; 어디가 잘못된건지 잘 모르겠습니다
소스는
public class setting extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.setlay);
String[] items;
ArrayAdapter<String> Adapter;
ListView list = (ListView) findViewById(R.id.list);
items = new String[] {"1", "2", "3", "4" };
Adapter = new ArrayAdapter<String>(this, R.id.list, items);
list.setAdapter(Adapter);
list.setOnItemClickListener(l);
}
AdapterView.OnItemClickListener l = new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
if(position == 0) {
Toast.makeText(setting.this, "hello", Toast.LENGTH_SHORT).show();
}
}
};
로써 그냥 단순히 리스트뷰가 나오고, 1번째것 클릭하면 토스트 나오게만 했고요. 아무런 에러가 안떳습니다.
그런데 main에서 이 액티비티로 오는 버튼을 누르는 순간 계속 앱이 죽습니다
08-02 17:50:11.940: E/AndroidRuntime(12879): FATAL EXCEPTION: main
08-02 17:50:11.940: E/AndroidRuntime(12879): android.content.res.Resources$NotFoundException: Resource ID #0x7f080006 type #0x12 is not valid
08-02 17:50:11.940: E/AndroidRuntime(12879): at android.content.res.Resources.loadXmlResourceParser(Resources.java:1874)
08-02 17:50:11.940: E/AndroidRuntime(12879): at android.content.res.Resources.getLayout(Resources.java:731)
08-02 17:50:11.940: E/AndroidRuntime(12879): at android.view.LayoutInflater.inflate(LayoutInflater.java:318)
08-02 17:50:11.940: E/AndroidRuntime(12879): at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:332)
08-02 17:50:11.940: E/AndroidRuntime(12879): at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323)
08-02 17:50:11.940: E/AndroidRuntime(12879): at android.widget.AbsListView.obtainView(AbsListView.java:1430)
08-02 17:50:11.940: E/AndroidRuntime(12879): at android.widget.ListView.measureHeightOfChildren(ListView.java:1216)
08-02 17:50:11.940: E/AndroidRuntime(12879): at android.widget.ListView.onMeasure(ListView.java:1127)
08-02 17:50:11.940: E/AndroidRuntime(12879): at android.view.View.measure(View.java:8322)
08-02 17:50:11.940: E/AndroidRuntime(12879): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
08-02 17:50:11.940: E/AndroidRuntime(12879): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017)
08-02 17:50:11.940: E/AndroidRuntime(12879): at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:701)
08-02 17:50:11.940: E/AndroidRuntime(12879): at android.widget.LinearLayout.onMeasure(LinearLayout.java:311)
08-02 17:50:11.940: E/AndroidRuntime(12879): at android.view.View.measure(View.java:8322)
08-02 17:50:11.940: E/AndroidRuntime(12879): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
08-02 17:50:11.940: E/AndroidRuntime(12879): at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
08-02 17:50:11.940: E/AndroidRuntime(12879): at android.view.View.measure(View.java:8322)
08-02 17:50:11.940: E/AndroidRuntime(12879): at android.widget.LinearLayout.measureVertical(LinearLayout.java:531)
08-02 17:50:11.940: E/AndroidRuntime(12879): at android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
08-02 17:50:11.940: E/AndroidRuntime(12879): at android.view.View.measure(View.java:8322)
08-02 17:50:11.940: E/AndroidRuntime(12879): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
08-02 17:50:11.940: E/AndroidRuntime(12879): at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
08-02 17:50:11.940: E/AndroidRuntime(12879): at android.view.View.measure(View.java:8322)
08-02 17:50:11.940: E/AndroidRuntime(12879): at android.view.ViewRoot.performTraversals(ViewRoot.java:842)
08-02 17:50:11.940: E/AndroidRuntime(12879): at android.view.ViewRoot.handleMessage(ViewRoot.java:1862)
08-02 17:50:11.940: E/AndroidRuntime(12879): at android.os.Handler.dispatchMessage(Handler.java:99)
08-02 17:50:11.940: E/AndroidRuntime(12879): at android.os.Looper.loop(Looper.java:130)
08-02 17:50:11.940: E/AndroidRuntime(12879): at android.app.ActivityThread.main(ActivityThread.java:3686)
08-02 17:50:11.940: E/AndroidRuntime(12879): at java.lang.reflect.Method.invokeNative(Native Method)
08-02 17:50:11.940: E/AndroidRuntime(12879): at java.lang.reflect.Method.invoke(Method.java:507)
08-02 17:50:11.940: E/AndroidRuntime(12879): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
08-02 17:50:11.940: E/AndroidRuntime(12879): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
08-02 17:50:11.940: E/AndroidRuntime(12879): at dalvik.system.NativeStart.main(Native Method)
공지사항 다 읽었습니다
2012.08.03 09:55:08
저도 잘 알지는 못하지만 일단 extends ListActivity로 알고있습니다...
근데 전 adapter을 써본적이없어요;
어떻게써야하는지 몰라서요 ㅠ
2012.08.03 13:29:34
Adapter = new ArrayAdapter<String>(this, R.id.list, items);
R.id.list가 잘못되었습니다. 두번째로 들어가는 view의 아이디는 리스트 아이템의 한 행을 구성하는 레이아웃의 아이디를 넣으셔야합니다.
한 행의 레이아웃이 복잡한 경우엔 레이아웃을 직접 만드셔도되고 간단한경우에는 기본으로 제공하는 레이아웃을 이용하실 수 있습니다.
Adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items);
이걸로 바꾸시면 될꺼에여. 기본으로 제공하는 레이아웃이고 텍스트뷰 하나만 들어가있는걸로 알고있어요.




Adapter = new ArrayAdapter<String>(this, R.id.list, items);
여기에서 두번째 변수 값이 저렇게 넣어도 되는건가요?
두번째 변수는 아이템들이 표시할 View에 해당하는 형식인데... ListView를 넣는건 처음봐서 물어봅니다.
ArrayAdapter(Context context, int textViewResourceId, T[] objects)