Вопрос по android – Android: каким образом я должен отделить код от стиля?

0

Начиная программирование на Android, начиная с html / php / css, я искал в Интернете простой способ отделить мой код от моего стиля - сейчас мне нужно отображать данные из базы данных в виде списка или таблицы.

Проще говоря, я получаю курсор из базы данных, перебираю его, создавая каждый элемент списка динамически в коде как TextViews. Затем я хотел бы применить стиль из внешнего файла макета XML для каждого элемента.

Pseudo-code:

style.xml:

// mystyle: жирный, 12pt

// ваш стиль: курсив, 11pt

Activity:

<code>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);
</code>

Примеры кода, которые я нашел в сети, используют несколько строк кода или несколько файлов xml (с использованием inflate или cursorAdapters), и IMO быстро становится раздутым. Я просто хочу хороший аккуратный способ применить стиль к динамически создаваемому коду. Это возможно?

Ваш Ответ

1   ответ
0

очень просто иметь XML-файл для строк. Единственное, что вам нужно, это файл XML и класс Adapter. Взгляните на этот простой пример:

Чтобы прочитать данные из базы данных, создайте вспомогательный класс, например:

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>
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded LongInt
Error: User Rate Limit Exceeded LongInt

Похожие вопросы