2012-05-02 10 views
0

html/php/cssからのAndroidプログラミングの初めに、自分のコードを自分のスタイルから分離する簡単な方法をWebで検索しました。今はデータベースのデータをリストビューまたはテーブルビューで表示する必要があります。Android:どのようにコードをスタイルから分離する必要がありますか?

単純に言えば、私はデータベースからカーソルを取得し、それを反復して、各リスト項目をコードでTextViewsとして動的に作成します。次に、外部XMLレイアウトファイルのスタイルを各アイテムに適用したいと思います。

擬似コード:

style.xml:

// MyStyleは:太字、12ptの

// yourstyle:イタリック、11pt

活性:

for (each cursor-entry) 
{ 
    tv1 = new TextView(); 
    applyStyle(tv, mystyle); 

    tv2 = new TextView(); 
    applyStyle(tv, yourstyle); 

    //Apply content to textviews from the cursor... 
} 
mainLayout.setView(tv1); 
mainLayout.setView(tv2); 

私はネット上で見つかったコード例、複数行のコード、または複数のxmlファイル(inflateまたはcursorAdaptersを使用)を使用し、IMOはすぐに肥大化します。私はちょうど動的に作成されたコードにスタイルを適用する素敵な素敵な方法が欲しいです。これは可能ですか?

答えて

0

ListViewを使用している場合は、行のXMLファイルを簡単に作成できます。必要なのは、XMLファイルとAdapterクラスだけです。データベースからデータを読み取るには

、次のようにヘルパークラスを作成します:この単純な例を見てみましょうあなたのActivityクラスで

public class MessagingDatabaseAdapter { 
    protected SQLiteDatabase database; 

    public MessagingDatabaseAdapter(Context context) { 
     MessagingDatabaseHelper databaseHelper = new MessagingDatabaseHelper(context, "message_history_db"); 
     database = databaseHelper.getWritableDatabase();   
    } 

    public void close() { 
     database.close(); 
    } 

    public void Entity[] getAllEntities() { 
     Entity[] values = null; 
     String query = "select * from TABLE_NAME"; 
     Cursor cursor = null; 
     try { 
      cursor = database.rawQuery(query, null); 
      if(cursor.moveToFirst()) { 
       int s = cursor.getCount(); 
       values = new Entity[s]; 
       do { 
        Entity entity = new Entity(); 
        entity.setSomeProperty(cursor.getInt(cursor.getColumnIndex(SOME_PROPERTY_COLUMN))); 
        values[i++] = entity; 
       } while(cursor.moveToNext()); 
      } 
     } catch(Exception ex) { 
     } finally { 
      if(cursor != null) { 
       cursor.close(); 
      }    
      return values; 
     } 
    } 

    protected class MessagingDatabaseHelper extends SQLiteOpenHelper { 

     public MessagingDatabaseHelper(Context context, String name) { 
      super(context, name, null, 1); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase db) { 
     db.execSQL("Your SQL to create Tables"); 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     } 
    } 
} 

MessagingDatabaseAdapter db = new MessagingDatabaseAdapter(); 
values = db.getAllEntities(); 
db.close(); 

list_view = (ListView) findViewById(R.id.list_view); 
ListAdapter adapter = new ListAdapter(this, values); 
list_view.setAdapter(adapter); 

そしてListAdapterクラス:

public class ListAdapter extends ArrayAdapter<Entity> { 
    final Context context; 
    final Entity[] values;  

    public ListAdapter(Context context, Entity[] values) { 
     super(context, R.layout.list_screen, values); 
     this.values = values; 
     this.context = context; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View rowView = inflater.inflate(R.layout.list_view_item, parent, false); 

     TextView datetimeTextView = (TextView) rowView.findViewById(R.id.list_view_datetime_text_view); 
     datetimeTextView.setTypeface(someTypeFace); 
     return rowView; 
    }  
} 

行レイアウトXMLファイル(list_view_item.xml):

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    style="@style/BorderedFrame" > 

    <TextView 
     android:id="@+id/inbox_list_view_datetime_text_view" 
     style="@style/MediumText" 
     android:layout_width="wrap_content" > 
    </TextView> 

</RelativeLayout> 
+0

2つの問題:カーソルを使用して '値'エンティティを作成するにはどうすればよいですか?また、ListadapterクラスのR.layout。*およびR.id. *は自分のxmlファイルを見つけることができません。 – LongInt

+0

が編集されました。 SQLiteデータベースからデータを取得するコードを追加しました。 –

+0

ありがとう、テストするつもりです。 – LongInt

関連する問題