마스터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 에서 따로 구현해주셔야겠네요
감사합니다 한번 찾아보겠습니다 ㅎ
...