2012-11-07 3 views
0

커서를 사용하고 어댑터를 사용하여 SQLite 데이터베이스에서 데이터를 읽고 listView에 표시합니다. 이 잘 작동하지만 지금은 listView에 표시하는 데이터의 양을 줄이려면.레이아웃에서 문자열 부분 표시

John Smith, 25, Moday, Consultation, Dr. Harley 
Jane Doe, 41, Wednesday, Surgery, Dr. Pope 

내가 그것을 표시 할 것은 :

John Smith, 25, Mo, Con, Harley 
Jane Doe, 41, We, Sur, Pope 

은 기본적으로 내가 문자열의 3을 구문 분석 할 순간에 그것은 다음을 표시합니다. 문제는 커서 어댑터가 데이터베이스의 열을 생성자의 문자열 배열로 사용하므로 구문 분석 작업을 어디에서 수행해야할지 모르겠다는 것입니다. 여러 가지 옵션을 시도했지만 인식 할 수없는 열 ID 오류 및 기타 런타임 오류가 발생했습니다. 누구든지 올바른 방향으로 나를 가리킬 수 있습니까?

어댑터가 생성되는 방법

private void fillList() { 
     Cursor c = db.getApts(); 
     startManagingCursor(c); 

     String[] from = new String[] {ModuleDB.KEY_AptCode, 
          ModuleDB.KEY_AptName, 
          ModuleDB.KEY_AptAge, 
          ModuleDB.KEY_AptDay, 
          ModuleDB.KEY_AptType, 
            ModuleDB.KEY_AptDoc}; 
     int[] to = new int[] {R.id.Aptcode_entry, 
         R.id.AptName_entry, 
         R.id.AptAge_entry, 
         R.id.Aptday_entry, 
           R.id.Apttype_entry, 
           R.id.Aptdoc_entry}; 

     SimpleCursorAdapter aptAdapter = 
       new SimpleCursorAdapter(this, R.layout.apt_entry, c, from, to); 
     setListAdapter(aptAdapter); 

    } 
+0

어댑터를 보여주십시오. 우려 사항을 분리하는 원칙 아래에서 파싱을 수행해야합니다. – Simon

+0

각각 개별 텍스트보기 또는 하나의 텍스트보기입니까? 귀하의 어댑터에서 구문 분석해야합니다. 어댑터 코드를 게시하십시오. 구문 분석은 getView 메소드에서 일어나야하며 서브 문자열을 사용하는 간단한 문제 여야합니다 – Slartibartfast

+0

@imim 어댑터 코드는 – adohertyd

답변

3

1) 활동을하자 구현 -

2 ViewBinder

) 당신의 열 사용 문자열 또한

public class YourActivity extends Activity 
    implements SimpleCursorAdapter.ViewBinder { 

    adapter.setViewBinder(this); //Put this line after your list creation and setlistAdapter 


    @Override 
    public boolean setViewValue(View view, Cursor cursor, int column) { 
    //Showing for day, similarly for others 
     int dayColumn = cursor.getColumnIndex(your day column name in quotes); 
     if (column == dayColumn) { 
      String dayString = cursor.getString(dayColumn); 
      ((TextView)view).setText(bodyString.subString(0, 3)); 

      return true; // Return true to show you've handled this column 
     } 
     return false; 
    } 

}

을 일치 - @ 사이먼은 오른쪽이다 - 사용자 지정 어댑터를 사용하는 Cursor Adapter를 확장하면 요구 사항이 더 발전하면 나중에 수정할 수있는 자유가 훨씬 많아지기 때문에 항상 더 좋습니다. 여기 내 머리 꼭대기에서 사용자 정의 어댑터를 사용하고 멋진 목록을 작성하는 방법에 대한 예가 있습니다. http://www.androidhive.info/2012/02/android-custom-listview-with-image-and-text/

+0

그 매우 포괄적 인 답변에 큰 감사드립니다. – adohertyd

1

당신이 무엇을 사용 어댑터 확실하지만, 모든 데이터가 그때 한 것을 확장하고 그것의 toString() 메소드를 오버라이드 (override) 줄 하나의 행으로 표시됩니다 가정하지 않습니다.

1

간단한 어댑터에서 toString()을 재정의 할 수 있다고 생각하지 않지만 아마도 도움이 될까요?

SimpleCursorAdapter aptAdapter= new SimpleCursorAdapter(this, R.layout.apt_entry, c, from, to); 

CursorToStringConverter stringConverter = new CursorToStringConverter() {  
    @Override 
    public CharSequence convertToString(Cursor cursor) { 
     return "Hello listview"; // whatever string you want to build using cursor.getString() etc 
    } 
}; 

aptAdapter.setCursorToStringConverter(stringConverter); 

[EDIT] 문서를 체크하고 SimpleCursorAdapter에는 toString() 메소드가 없으며 수퍼 클래스도 없습니다.

+0

덕분에 대단히 감사합니다. 나는 이것에 대해 올바른 방향으로 가고 있는가? 다른 유형의 커서로 시작해야합니까? – adohertyd

+0

데이터를 반환하는 것이 유일한 작업이기 때문에 커서의 질문이 아닙니다. 이 작업을 수행 할 때마다 필자는 매우 특정한 방식으로 데이터에 표시하고 싶었습니다. 형식화 된 열, 다른 색, 행이 강조 표시 되었기 때문에 항상 내 자신의 어댑터를 만들었습니다. 그러나 SimpleCursorAdapter는 이름에서 알 수 있듯이 간단하게 나타납니다. Slaribarfast의 솔루션을 보았는데 실제로 문자열 변환기를 사용하는 것보다 나보다 낫다고 생각합니다. 필터는 모든 것을 반환하도록 구성 할 수 있지만 솔루션은 더 깨끗합니다. – Simon

+0

나는 Slartibartfast의 솔루션을 정확하게 표시 하겠지만 대신 사용자 정의 어댑터를 살펴볼 것입니다. 귀하의 의견을 보내 주셔서 감사합니다. – adohertyd