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

검색기능 좀 도와주세요.

0 추천
package com.romen.CancerAdvice;

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.res.AssetManager;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;

public class CancerAdvice extends Activity {
 
 // DB옮기기

 public SQLiteDatabase db;
 public Cursor cursor;
 public SimpleCursorAdapter Adapter = null;
 public SimpleCursorAdapter AdapterStomach = null;
 private ListView lv;
 // 텍스트 검색
 EditText inputSearch;
 //검색기능
 ArrayAdapter<String> adapter;
 // Search EditText

 
 public static final String ROOT_DIR = "/data/data/com.romen.CancerAdvice/databases/";
 ProductDBHelper mHelper;

 public void setDB() {
  File folder = new File(ROOT_DIR);
  folder.mkdir();
  if (folder.exists()) {

  } else {
   folder.mkdirs();
   // Toast.makeText(this, "폴더생성", Toast.LENGTH_LONG).show();
  }

////////////////////////////////////////////////////// DB파일 로드///////////////////////////////////////////////
  
  AssetManager assetManager = getResources().getAssets();
  File outfile = new File(ROOT_DIR + "test.db"); // --폰에 위치할 경로

  InputStream is = null;

  FileOutputStream fo = null;

  long filesize = 0;

  try {
   // --asset 폴더 및 복사할 DB 지정
   is = assetManager.open("test.db", AssetManager.ACCESS_BUFFER);
   filesize = is.available(); // --사이즈 검증

   // 파일이 없거나 패키지 폴더에 설치된 DB파일이 포함된 DB파일 보다 크기가 같지않을 경우 DB파일을 덮어 쓴다.
   if (outfile.length() <= 0) {
    byte[] tempdata = new byte[(int) filesize];
    is.read(tempdata);
    is.close();
    outfile.createNewFile();
    fo = new FileOutputStream(outfile);
    fo.write(tempdata);
    fo.close();
   } else {
    // Toast.makeText(this, "db있음", Toast.LENGTH_LONG).show();

   }
  } catch (IOException e) {
   Toast.makeText(this, "db이동실패", Toast.LENGTH_LONG).show();
  }
 }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 
 

 @Override
 public void onCreate(Bundle savedInstanceState) {

  setDB();
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
   inputSearch = (EditText) findViewById(R.id.inputSearch);
   
   String cs[] =new String[]{ }; // 이쪽이문제
   
   adapter = new ArrayAdapter<String>(this, R.layout.mylist, R.id.text1,cs);
    lv = (ListView) findViewById(R.id.list);
   inputSearch.addTextChangedListener(new TextWatcher() {
    
    @Override
    public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
     // When user changed the Text
     CancerAdvice.this.adapter.getFilter().filter(cs); 
    }
    
    @Override
    public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
      int arg3) {
     // TODO Auto-generated method stub
     
    }
    
    @Override
    public void afterTextChanged(Editable arg0) {
     // TODO Auto-generated method stub       
    }
   });
  
  
  
  
///////////////////////db내용////////////////////
  
  
  
  ListView list = (ListView) findViewById(R.id.list);
  mHelper = new ProductDBHelper(this);

  db = mHelper.getWritableDatabase();
  cursor = db.rawQuery("SELECT * FROM test where title='관리'", null);
  startManagingCursor(cursor);
 
  AdapterStomach = new SimpleCursorAdapter(list.getContext(),
    R.layout.mylist, cursor, new String[] { "content1" },
    new int[] { R.id.text1 });
  
 
  list.setAdapter(AdapterStomach);
  
  
  
  

  
  
  
  
  
  
  
  
  
//////////////////////////////////////// 클릭시 나오는 화면 ///////////////////////////////////////
  
  list.setOnItemClickListener(new OnItemClickListener() {
   @Override
   public void onItemClick(AdapterView<?> parent, View v,
     int position, long id) {
    cursor = db.rawQuery("SELECT * FROM test where title='관리'",
      null);
    startManagingCursor(cursor);
    Cursor c = (Cursor) AdapterStomach.getItem(position);
    String note = c.getString(2);

    AlertDialog.Builder bld = new AlertDialog.Builder(
      CancerAdvice.this);
    bld.setTitle(c.getString(2));
    bld.setMessage(note);
    bld.setIcon(R.drawable.ic_menu_edit);
    bld.setPositiveButton("Close",
      new DialogInterface.OnClickListener() {

       @Override
       public void onClick(DialogInterface dialog,
         int which) {
        // TODO Auto-generated method stub

       }
      });
    bld.show();
    // Toast.makeText(getApplicationContext(), note,
    // Toast.LENGTH_LONG).show();
   }
  });

 }

 class ProductDBHelper extends SQLiteOpenHelper {

  public ProductDBHelper(Context context) {
   super(context, "test.db", null, 1);
   // TODO Auto-generated constructor stub
  }

  @Override
  public void onCreate(SQLiteDatabase db) {
   // TODO Auto-generated method stub

  }

  @Override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
   // TODO Auto-generated method stub
ㅇ
  }

 }

}

제가 db를 이용해서 리스트로 출력은 했는데요..

거기에 검색기능을 더해서 검색하면 리스트에 있는 내용만 추출하게 하고싶은데

그 기능이 잘안되네요..

arrayAdaper<String>(this.R.layout.mylist.R.id.text1.cs) 이부분에서 cs가 list, String 부분만 들어가는 것 같더라구요.

그래서 그걸 db결과값이랑 연결시켜서 string으로 만들어야하는데.. 좀 부탁드리겠습니다.

스릉흔드 (200 포인트) 님이 2014년 10월 14일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...