String[] meta_head = {
"Title",
"Artist",
"Genre",
"Copyright",
"Album",
"TrackNumber",
"Description",
"Rating",
"Date",
"Setting",
"URL",
"Language",
"NowPlaying",
"Publisher",
"EncodedBy",
"ArtworkURL",
"TrackID",
"TrackTotal",
"Director",
"Season",
"Episode",
"ShowName",
"Actors",
"AlbumArtist",
"DiscNumber",
"MAX",
};
String[] meta_data = {
media.getMeta(Media.Meta.Title),
media.getMeta(Media.Meta.Artist),
media.getMeta(Media.Meta.Genre),
media.getMeta(Media.Meta.Copyright),
media.getMeta(Media.Meta.Album),
media.getMeta(Media.Meta.TrackNumber),
media.getMeta(Media.Meta.Description),
media.getMeta(Media.Meta.Rating),
media.getMeta(Media.Meta.Date),
media.getMeta(Media.Meta.Setting),
media.getMeta(Media.Meta.URL),
media.getMeta(Media.Meta.Language),
media.getMeta(Media.Meta.NowPlaying),
media.getMeta(Media.Meta.Publisher),
media.getMeta(Media.Meta.EncodedBy),
media.getMeta(Media.Meta.ArtworkURL),
media.getMeta(Media.Meta.TrackID),
media.getMeta(Media.Meta.TrackTotal),
media.getMeta(Media.Meta.Director),
media.getMeta(Media.Meta.Season),
media.getMeta(Media.Meta.Episode),
media.getMeta(Media.Meta.ShowName),
media.getMeta(Media.Meta.Actors),
media.getMeta(Media.Meta.AlbumArtist),
media.getMeta(Media.Meta.DiscNumber),
media.getMeta(Media.Meta.MAX),
};
for (int i = 0; i < meta_data.length; ++i) {
if (meta_data[i] == null) {
continue;
}
TableRow tableRow = inflateRow(meta_head[i], meta_data[i]);
vTableLayout.addView(tableRow);
}
如果有信息则添加一行(没有找到信息则跳过不显示),效果如下
// meta data
String[][] metaHeadData = {
{cache_meta_title, media.getMeta(Media.Meta.Title)},
{cache_meta_artist, media.getMeta(Media.Meta.Artist)},
{cache_meta_genre, media.getMeta(Media.Meta.Genre)},
{cache_meta_copyright, media.getMeta(Media.Meta.Copyright)},
{cache_meta_album, media.getMeta(Media.Meta.Album)},
{cache_meta_tracknumber, media.getMeta(Media.Meta.TrackNumber)},
{cache_meta_description, media.getMeta(Media.Meta.Description)},
{cache_meta_rating, media.getMeta(Media.Meta.Rating)},
{cache_meta_date, media.getMeta(Media.Meta.Date)},
{cache_meta_setting, media.getMeta(Media.Meta.Setting)},
{cache_meta_url, media.getMeta(Media.Meta.URL)},
{cache_meta_language, media.getMeta(Media.Meta.Language)},
{cache_meta_nowplaying, media.getMeta(Media.Meta.NowPlaying)},
{cache_meta_publisher, media.getMeta(Media.Meta.Publisher)},
{cache_meta_encodedby, media.getMeta(Media.Meta.EncodedBy)},
{cache_meta_artworkurl, media.getMeta(Media.Meta.ArtworkURL)},
{cache_meta_trackid, media.getMeta(Media.Meta.TrackID)},
{cache_meta_tracktotal, media.getMeta(Media.Meta.TrackTotal)},
{cache_meta_director, media.getMeta(Media.Meta.Director)},
{cache_meta_season, media.getMeta(Media.Meta.Season)},
{cache_meta_episode, media.getMeta(Media.Meta.Episode)},
{cache_meta_showname, media.getMeta(Media.Meta.ShowName)},
{cache_meta_actors, media.getMeta(Media.Meta.Actors)},
{cache_meta_albumartist, media.getMeta(Media.Meta.AlbumArtist)},
{cache_meta_discnumber, media.getMeta(Media.Meta.DiscNumber)},
{cache_meta_max, media.getMeta(Media.Meta.MAX)},
};
我已经改成上面这样了,虽然密密麻麻,搞个二维数组代码还是稍微优雅点。cache_meta_xxx 这些是 String,支持多语言。
1
asj 2018-04-15 15:35:05 +08:00 via Android
挺好的啊,不知道你要优化什么
喜欢的话可以把两个数组改成一个对象的数组,看起来 header 和 data 的关系更清楚一些。 |
2
AlisaDestiny 2018-04-15 16:44:19 +08:00
我觉得也还行。
但是如果你还想优化的话你 meta_data 数组用 meta_head 定义的字符数组根据名称反射拿到对应的属性。 |
3
fireapp 2018-04-15 17:49:20 +08:00 via Android
enum(String, String) 啊
|
4
sununiq 2018-04-15 21:11:05 +08:00
枚举,关联 head 和 data
|
5
aristotll 2018-04-15 21:47:47 +08:00
枚举应该是更好的 方式 可以保证总是能对上 然后用 values 方法
|
6
aristotll 2018-04-15 22:04:41 +08:00
今天好无聊 改写了一个...
@AllArgsConstructor enum Row { Title(Meta.Title), Artist(Meta.Artist); private final Meta data; public String metaFrom(final Media media) { return media.getMeta(this.data); } public static void main(final Media media) { for (final Row row : Row.values()) { final String meta = row.metaFrom(media); if (meta == null) { continue; } final TableRow tableRow = inflateRow(row.name(), meta); } } } |
7
814084764 2018-04-15 23:02:55 +08:00
HashMap?
|
8
privatezcoding 2018-04-16 09:46:20 +08:00
Android 开发并不推荐枚举 变量命名应该使用驼峰
|
9
WispZhan 2018-04-16 11:47:29 +08:00
枚举或者 Map。个人推荐类型安全的枚举。
|
10
kifile 2018-04-16 19:09:40 +08:00
假设 Meta 是枚举
String[] meta_data = { media.getMeta(Media.Meta.Title), media.getMeta(Media.Meta.Artist), media.getMeta(Media.Meta.Genre), media.getMeta(Media.Meta.Copyright), media.getMeta(Media.Meta.Album), media.getMeta(Media.Meta.TrackNumber), media.getMeta(Media.Meta.Description), media.getMeta(Media.Meta.Rating), media.getMeta(Media.Meta.Date), media.getMeta(Media.Meta.Setting), media.getMeta(Media.Meta.URL), media.getMeta(Media.Meta.Language), media.getMeta(Media.Meta.NowPlaying), media.getMeta(Media.Meta.Publisher), media.getMeta(Media.Meta.EncodedBy), media.getMeta(Media.Meta.ArtworkURL), media.getMeta(Media.Meta.TrackID), media.getMeta(Media.Meta.TrackTotal), media.getMeta(Media.Meta.Director), media.getMeta(Media.Meta.Season), media.getMeta(Media.Meta.Episode), media.getMeta(Media.Meta.ShowName), media.getMeta(Media.Meta.Actors), media.getMeta(Media.Meta.AlbumArtist), media.getMeta(Media.Meta.DiscNumber), media.getMeta(Media.Meta.MAX), }; meta_data.stream().filter(s->s!=null) .map(s->inflateRow(s.name(), s) .forEach(s->vTableLayout.addView(s)); |