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

메인 액티비티에서 따로 생성한 리스트뷰 클래스를 불러올경우

0 추천
package app.smtit_yd;
 
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
 
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.AssetManager;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
 
public class MainActivity extends Activity {
     
    Button alert;                   //팝업버튼선언
     
    static final String [] all_item = {"기본값:자동조회","월~목","금요일","토, 일"};
     
     
 
         
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);  // 레이아웃 지정 해줌
         
        Spinner spinner = (Spinner) findViewById(R.id.selector1);       // 셀렉터 선언 activity_main.xml에 선언 되어있는 selector1을 레이아웃 씌운다
         
         
        ArrayAdapter<String> adapter = new ArrayAdapter<String>         // 배열의 <String> 타입의 어댑터 선언
        (this, android.R.layout.simple_spinner_dropdown_item, all_item);        // all_item은 윗 부분에 설정해준 static final String[] all_item을 가르킨다.
        spinner.setAdapter(adapter);
         
        alert=(Button)findViewById(R.id.imgbtn01);  // activity_main.xml에 선언된 이미지 버튼 아이디 값 R.id.imgbtn01
        alert.setOnClickListener(clickListener1);
         
       // 리스트 뷰 클래스 호출                
        startActivity(new Intent(MainActivity.this, ListView_Act.class));
  
    }
 
 
 
 
package app.smtit_yd;
 
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
 
import android.app.ListActivity;
import android.content.Context;
import android.content.res.AssetManager;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.TextView;
 
public class ListView_Act extends ListActivity {
     
    TextView tv1, tv2, tv3;
    public static Context mContext;
     
 
    public static final String PACKAGE_DIR = "/data/data/app.smtit_yd/";
    public static final String DATABASE_NAME = "M_T_in_time.db";
    public static final String COPYDATA_NAME = "M_T_in_time.db";
    public static void initalize(Context ctx) {
        // check
        File folder = new File(PACKAGE_DIR + "databases");
        folder.mkdir();
        File outfile = new File(PACKAGE_DIR + "database/" + COPYDATA_NAME);
         
        if (outfile.length() <= 0) {
            AssetManager assetManager = ctx.getResources().getAssets();
            try {
                InputStream is = assetManager.open(DATABASE_NAME, AssetManager.ACCESS_BUFFER);
                long filesize = is.available();
                byte [] tempdata = new byte[(int)filesize];
                is.read();
                is.close();
                outfile.createNewFile();
                FileOutputStream fo = new FileOutputStream(outfile);
                fo.write(tempdata);
                fo.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
     
     
    public void onCreate(Bundle savedInstanceState) {
         
        mContext = this;
         
        setContentView(R.layout.activity_main);
         
        initalize(getApplicationContext());
         
        String [] stationTime = null;
        String [] townTime = null;
        String [] univTime = null;
 
         
        try {
            SQLiteDatabase db = openOrCreateDatabase("M_T_in_time.db", Context.MODE_PRIVATE, null);
             
            // 쿼리로 db의 커서 획득
            Cursor cur = db.rawQuery("SELECT * From M_T_in_time", null);
             
            // 커서를 처음으로 이동
            cur.moveToFirst();
             
            // 읽은 값 출력하기
                 
            int i = 0;
            do{
                     
                    //stationTime.add(cur.getString(i));   // 0
                 
                    stationTime[i] = cur.getString(0);
                    townTime[i] = cur.getString(0);
                    univTime[i] = cur.getString(0);
                     
                    i++;
                     
            } while(cur.moveToNext()); // 그다음에 row값을 다음으로 넘겨준다.
             
            cur.close();
 
        } catch (Exception e){
        Log.i("ERROR!!!!","" + e.toString());  
                 
        }
         
        ArrayAdapter<String> s_Adap = new ArrayAdapter<String> (this, R.layout.row, R.id.station_func,stationTime);
        ArrayAdapter<String> t_Adap = new ArrayAdapter<String> (this, R.layout.row, R.id.town_func,townTime);
        ArrayAdapter<String> u_Adap = new ArrayAdapter<String> (this, R.layout.row, R.id.univ_func,univTime);
         
        setListAdapter(s_Adap);
        setListAdapter(t_Adap);
        setListAdapter(u_Adap);
         
        TextView tv1 = (TextView)findViewById(R.id.station_func);
        TextView tv2 = (TextView)findViewById(R.id.town_func);
        TextView tv3 = (TextView)findViewById(R.id.univ_func);
    }
}

호출할 경우 

startActivity(new Intent(MainActivity.this, ListView_Act.class));

이런식으로 불러서 사용하는것이 맞는건가요??

흠.. 제가 하려는게 이제 리스트뷰의 한 row에 3개의 값을 넣고 싶어서 리스트 뷰 액티비티를 따로 만든건데

어떻게 연동을 해야 하는지를 잘 모르겠습니다 도움 부탁드립니다 

개님개님 (520 포인트) 님이 2015년 2월 12일 질문
밑의 소스 어뎁터에도 많은 문제가 있는것 같습니다 ㅠ
매니페스트입니다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="app.smtit_yd"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="21" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="app.smtit_yd.IntroActivity"
            android:label="@string/app_name" >
            
            
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
                
            </intent-filter>
        </activity>
        
                <activity android:name="app.smtit_yd.ListView_Act"
                    android:theme="@style/AppTheme" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                
            </intent-filter>
            </activity>
                
        <activity android:name="app.smtit_yd.MainActivity"
                    android:theme="@style/AppTheme" />
        


        
    </application>

</manifest>
로그캣 오류입니다.

02-12 06:39:25.703: D/dalvikvm(1329): GC_FOR_ALLOC freed 43K, 1% free 8887K/8956K, paused 6ms, total 24ms
02-12 06:39:26.035: I/dalvikvm-heap(1329): Grow heap (frag case) to 16.611MB for 8294412-byte allocation
02-12 06:39:26.063: D/dalvikvm(1329): GC_FOR_ALLOC freed <1K, 1% free 16986K/17060K, paused 25ms, total 25ms
02-12 06:39:26.343: D/libEGL(1329): loaded /system/lib/egl/libEGL_genymotion.so
02-12 06:39:26.395: D/(1329): HostConnection::get() New Host Connection established 0xb8f16fb8, tid 1329
02-12 06:39:26.455: D/libEGL(1329): loaded /system/lib/egl/libGLESv1_CM_genymotion.so
02-12 06:39:26.455: D/libEGL(1329): loaded /system/lib/egl/libGLESv2_genymotion.so
02-12 06:39:26.575: W/EGL_genymotion(1329): eglSurfaceAttrib not implemented
02-12 06:39:26.575: E/OpenGLRenderer(1329): Getting MAX_TEXTURE_SIZE from GradienCache
02-12 06:39:26.591: E/OpenGLRenderer(1329): Getting MAX_TEXTURE_SIZE from Caches::initConstraints()
02-12 06:39:26.591: D/OpenGLRenderer(1329): Enabling debug mode 0
02-12 06:39:27.659: I/Choreographer(1329): Skipped 62 frames!  The application may be doing too much work on its main thread.
02-12 06:39:29.623: D/dalvikvm(1329): GC_FOR_ALLOC freed 5K, 1% free 17017K/17060K, paused 7ms, total 8ms
02-12 06:39:29.759: I/dalvikvm-heap(1329): Grow heap (frag case) to 24.551MB for 8294412-byte allocation
02-12 06:39:29.767: D/dalvikvm(1329): GC_FOR_ALLOC freed <1K, 1% free 25117K/25164K, paused 10ms, total 10ms
02-12 06:39:29.999: W/EGL_genymotion(1329): eglSurfaceAttrib not implemented
02-12 06:39:31.923: D/AndroidRuntime(1329): Shutting down VM
02-12 06:39:31.923: W/dalvikvm(1329): threadid=1: thread exiting with uncaught exception (group=0xa4c0f648)


02-12 06:39:32.043: E/AndroidRuntime(1329): FATAL EXCEPTION: main
02-12 06:39:32.043: E/AndroidRuntime(1329): java.lang.RuntimeException: Unable to start activity ComponentInfo{app.smtit_yd/app.smtit_yd.ListView_Act}: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'


02-12 06:39:32.043: E/AndroidRuntime(1329):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
02-12 06:39:32.043: E/AndroidRuntime(1329):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
02-12 06:39:32.043: E/AndroidRuntime(1329):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
02-12 06:39:32.043: E/AndroidRuntime(1329):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
02-12 06:39:32.043: E/AndroidRuntime(1329):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-12 06:39:32.043: E/AndroidRuntime(1329):     at android.os.Looper.loop(Looper.java:137)
02-12 06:39:32.043: E/AndroidRuntime(1329):     at android.app.ActivityThread.main(ActivityThread.java:5103)
02-12 06:39:32.043: E/AndroidRuntime(1329):     at java.lang.reflect.Method.invokeNative(Native Method)
02-12 06:39:32.043: E/AndroidRuntime(1329):     at java.lang.reflect.Method.invoke(Method.java:525)
02-12 06:39:32.043: E/AndroidRuntime(1329):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
02-12 06:39:32.043: E/AndroidRuntime(1329):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
02-12 06:39:32.043: E/AndroidRuntime(1329):     at dalvik.system.NativeStart.main(Native Method)
02-12 06:39:32.043: E/AndroidRuntime(1329): Caused by: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'
02-12 06:39:32.043: E/AndroidRuntime(1329):     at android.app.ListActivity.onContentChanged(ListActivity.java:243)
02-12 06:39:32.043: E/AndroidRuntime(1329):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:270)
02-12 06:39:32.043: E/AndroidRuntime(1329):     at android.app.Activity.setContentView(Activity.java:1895)
02-12 06:39:32.043: E/AndroidRuntime(1329):     at app.smtit_yd.ListView_Act.onCreate(ListView_Act.java:56)
02-12 06:39:32.043: E/AndroidRuntime(1329):     at android.app.Activity.performCreate(Activity.java:5133)
02-12 06:39:32.043: E/AndroidRuntime(1329):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
02-12 06:39:32.043: E/AndroidRuntime(1329):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
02-12 06:39:32.043: E/AndroidRuntime(1329):     ... 11 more
02-12 06:39:34.091: I/Process(1329): Sending signal. PID: 1329 SIG: 9

1개의 답변

0 추천
 
채택된 답변

일단 이것부터 수정을 하셔요

File outfile = new File(PACKAGE_DIR + "database/" + COPYDATA_NAME);

=>

File outfile = new File(PACKAGE_DIR + "databases/" + COPYDATA_NAME);

nicehee (73,100 포인트) 님이 2015년 2월 12일 답변
개님개님님이 2015년 2월 14일 채택됨
아 감사합니다 ㅎㅎ
저기에 오타가 있었네요 ㅠ
세개를 넣으실려면 커스텀 어댑터를 사용해
getView 에서 따로 구현해주셔야겠네요
감사합니다 한번 찾아보겠습니다 ㅎ
...