마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

extends ListActivity 부분을 Activity로

0 추천

public class MainActivity2 extends Activity  {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list)
        final ListView listView;

        Cursor cursor = getURI();  // 전화번호부 가져오기
        int end = cursor.getCount(); // 전화번호부의 갯수 세기
        name = new String[end];   // 전화번호부의 이름을 저장할 배열 선언


        setListAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_multiple_choice, // 멀티 쵸이스
                new_name));

        listView = getListView();         // 리스트뷰
        listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);  // 반드시 설정해줘야 멀티초이스
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                String mes = "";
                long num[] = listView.getCheckItemIds();  // 현재 체크된 id들의 배열 리턴
                if (num.length > 5) {        // 최대 선택가능 갯수 제한
                    listView.setItemChecked(position, false); // 강제로 언첵
                    Toast.makeText(MainActivity2.this,
                            "5개까지만 선택이 가능합니다.",
                            Toast.LENGTH_SHORT).show();
                    return;
                }
                // 화면표시 - 여기서 얻어온 값들 처리하심됨
                mes = "Selected Item : \n";
                for (int i = 0; i < num.length; i++) {
                    mes += i + " : " + name[(int) num[i]];
                    mes += "\n";
                }
                Log.e(tag, mes);
                Toast.makeText(MainActivity2.this, mes, Toast.LENGTH_SHORT).show();
            }
        });
    }

 }   

ListActivity 부분을 Activity로 써서 하고싶은데 저 두부분을 어떻게바꿔야할까요...

chobojin (200 포인트) 님이 2015년 11월 28일 질문

1개의 답변

0 추천

ArrayAdapter arrayAdapter = setListAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_multiple_choice// 멀티 쵸이스
                new_name));

        listView = getListView();         // 리스트뷰

listView.setAdapter(arrayAdapter); 

이렇게 하면 되지 않나용?

라쎄린드 (25,460 포인트) 님이 2015년 11월 29일 답변
ArrayAdapter arrayAdapter = setListAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_multiple_choice, // 멀티 쵸이스
                new_name));
        listView = getListView();         // 리스트뷰
        listView.setAdapter(arrayAdapter);
        listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);  // 반드시 설정해줘야 멀티초이스

이렇게했는데 setListAdapter부분에 cannot resolve method 'setListAdapter(android.widget.ArrayAdapter<java.lang.String>)' 에러가뜨네요

listView = getListView(); 여기에는 Cannot resolve method 'getListView()' 에러뜨고요 ListActivity를 Activity로써서 버튼추가해서 쓰려는데 도움좀주세요 ㅠ
listView = getListView()
-> xml로 listView하나 만드시고... ListView listView = (ListView) findViewById(R.id.리스트뷰아이디);

setListAdapter(new ArrayAdapter....) 지우시고
-> listView.setAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_multiple_choice, // 멀티 쵸이스
                new_name));
listView = getListView();
        ListView listView = (ListView) findViewById(R.id.list);

        listView.setAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_multiple_choice, // 멀티 쵸이스
                new_name));

        listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);  // 반드시 설정해줘야 멀티초이스


        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                String mes="";
                long num[] = listView.getCheckItemIds();  // 현재 체크된 id들의 배열 리턴
                if(num.length>5) {        // 최대 선택가능 갯수 제한
                    listView.setItemChecked(position, false); // 강제로 언첵
                    Toast.makeText(MainActivity2.this,
                            "5개까지만 선택이 가능합니다.",
                            Toast.LENGTH_SHORT).show();
                    return;
                }

이거맞나요??  맨위 listView = getListView();이부분이 can not resolve method getListView()로 에러가떠요..
getListView()를 지우라고 말씀 드린건데 제가 글을 좀 잘못쓴듯 하네요 ^^;
맨 윗줄만 지우고 listView는 아래라인에서 처리 했으니
될듯합니다.

 ListView listView = (ListView) findViewById(R.id.list);

        listView.setAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_multiple_choice, // 멀티 쵸이스
                new_name));

        listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);  // 반드시 설정해줘야 멀티초이스


        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                String mes="";
                long num[] = listView.getCheckItemIds();  // 현재 체크된 id들의 배열 리턴
                if(num.length>5) {        // 최대 선택가능 갯수 제한
                    listView.setItemChecked(position, false); // 강제로 언첵
                    Toast.makeText(MainActivity2.this,
                            "5개까지만 선택이 가능합니다.",
                            Toast.LENGTH_SHORT).show();
                    return;
                }
long num[] = listView.getCheckItemIds();  // 현재 체크된 id들의 배열 리턴
                            if (num.length > 5) {        // 최대 선택가능 갯수 제한
                                listView.setItemChecked(position, false); // 강제로 언첵
저위대로하면요 요부분에서  listView 위아래 2군데에 Variable 'listView' is accessed from within inner class, needs to be declared final 이란 에러가뜨길래
alt +enter 하면  final ListView listView = (ListView) findViewById(R.id.list); 이부분에 파이널이 붙습니다
12-01 14:41:29.693 7524-7524/? I/SELinux: Function: selinux_android_load_priority [0], There is no sepolicy file.
12-01 14:41:29.693 7524-7524/? I/SELinux:  
12-01 14:41:29.723 7524-7524/? I/SELinux: Function: selinux_android_load_priority , spota verifySig and checkHash pass. priority version is VE=SEPF_SHV-E330S_4.4.2_0032
12-01 14:41:29.723 7524-7524/? I/SELinux:  
12-01 14:41:29.723 7524-7524/? I/SELinux:  
12-01 14:41:29.723 7524-7524/? I/SELinux: selinux_android_seapp_context_reload: seapp_contexts file is loaded from /data/security/spota/seapp_contexts
12-01 14:41:29.723 7524-7524/? E/dalvikvm: >>>>> Normal User
12-01 14:41:29.723 7524-7524/? E/dalvikvm: >>>>> com.example.jh.test [ userId:0 | appId:10249 ]
12-01 14:41:29.723 7524-7524/? D/dalvikvm: Late-enabling CheckJNI
12-01 14:41:30.113 7524-7524/com.example.jh.test W/ApplicationPackageManager: getCSCPackageItemText()
12-01 14:41:30.113 7524-7524/com.example.jh.test I/PersonaManager: getPersonaService() name persona_policy
12-01 14:41:30.193 7524-7524/com.example.jh.test I/Adreno-EGL: <qeglDrvAPI_eglInitialize:410>: EGL 1.4 QUALCOMM build:  ()
12-01 14:41:30.193 7524-7524/com.example.jh.test I/Adreno-EGL: OpenGL ES Shader Compiler Version: E031.24.00.08+13
12-01 14:41:30.193 7524-7524/com.example.jh.test I/Adreno-EGL: Build Date: 03/20/14 Thu
12-01 14:41:30.193 7524-7524/com.example.jh.test I/Adreno-EGL: Local Branch: 0320_AU200_patches
12-01 14:41:30.193 7524-7524/com.example.jh.test I/Adreno-EGL: Remote Branch:
12-01 14:41:30.193 7524-7524/com.example.jh.test I/Adreno-EGL: Local Patches:
12-01 14:41:30.193 7524-7524/com.example.jh.test I/Adreno-EGL: Reconstruct Branch:
12-01 14:41:30.243 7524-7524/com.example.jh.test D/OpenGLRenderer: Enabling debug mode 0
12-01 14:41:35.433 7524-7524/com.example.jh.test D/AbsListView: Get MotionRecognitionManager
12-01 14:41:35.453 7524-7524/com.example.jh.test D/AndroidRuntime: Shutting down VM
12-01 14:41:35.453 7524-7524/com.example.jh.test W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x4173ada0)
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime: FATAL EXCEPTION: main
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime: Process: com.example.jh.test, PID: 7524
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.jh.test/com.example.jh.test.MainActivity2}: java.lang.SecurityException: Permission Denial: reading com.android.providers.contacts.ContactsProvider2 uri content://com.android.contacts/data/phones from pid=7524, uid=10249 requires android.permission.READ_CONTACTS, or grantUriPermission()
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2305)
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363)
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime:     at android.app.ActivityThread.access$900(ActivityThread.java:161)
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265)
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:102)
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:157)
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5356)
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime:     at java.lang.reflect.Method.invokeNative(Native Method)
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:515)
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime:     at dalvik.system.NativeStart.main(Native Method)
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime:  Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.contacts.ContactsProvider2 uri content://com.android.contacts/data/phones from pid=7524, uid=10249 requires android.permission.READ_CONTACTS, or grantUriPermission()
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime:     at android.os.Parcel.readException(Parcel.java:1465)
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime:     at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:185)
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime:     at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:137)
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime:     at android.content.ContentProviderProxy.query(ContentProviderNative.java:413)
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime:     at android.content.ContentResolver.query(ContentResolver.java:464)
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime:     at android.content.ContentResolver.query(ContentResolver.java:407)
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime:     at android.app.Activity.managedQuery(Activity.java:1877)
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime:     at com.example.jh.test.MainActivity2.getURI(MainActivity2.java:97)
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime:     at com.example.jh.test.MainActivity2.onCreate(MainActivity2.java:29)
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime:     at android.app.Activity.performCreate(Activity.java:5426)
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2269)
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363) 
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime:     at android.app.ActivityThread.access$900(ActivityThread.java:161) 
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265) 
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:102) 
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:157) 
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5356) 
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime:     at java.lang.reflect.Method.invokeNative(Native Method) 
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:515) 
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265) 
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) 
12-01 14:41:35.463 7524-7524/com.example.jh.test E/AndroidRuntime:     at dalvik.system.NativeStart.main(Native Method) 
12-01 14:42:16.293 7524-7524/com.example.jh.test I/Process: Sending signal. PID: 7524 SIG: 9
그리고 실행했을떄 로그캣입니다
일단 에러는 퍼미션이 없습니다군요...
READ_CONTACTS에 관한 퍼미션 문제인걸로 보입니다.
Variable 'listView' is accessed from within inner class, needs to be declared final
이 부분은 지역변수로 사용하였는데...
setOnItemClickListener(new AdapterView.OnItemClickListener() 여기에서 지역변수인 listView를 호출했기 때문에 나오는 내용입니다. (지역변수는 그 함수 호출이 끝나면 사라지죠... 그래서 상수화 해놓는... 그런데 솔직히 뷰 컨트롤을 지역으로 쓰는건 이런저런 불편함이 있으니 listView랑 adapter는 멤버변수로 선언해놓고 쓰시는게 나을듯합니다. )
아 감사합니다 READ_CONTACTS에 관한 퍼미션 문제였네요....ㅜㅜ 감사합니다
...