好的,这个问题可能听起来很幼稚,但我从来没有能够从这个问题的可靠来源找到答案。
我有一个复杂的观点,我正在从XML中膨胀。我还有很多与该视图相关的动作和属性。此外,视图是复杂列表的一部分。目前,我正在从XML中扩展视图并在MainActivity
中执行所有操作。但是,这种复杂的代码并不是一个公平的设计策略。
所以,我尝试使用谷歌搜索来封装View类中的膨胀视图,并提出了以下设计:
public class FeedView extends LinearLayout {
Feed feed;
SlideAnimation inAnimation;
SlideAnimation outAnimation;
View view;
boolean isViewExpanded;
List<Article> articleList;
public boolean isViewExpanded() {
return isViewExpanded;
}
public void setViewExpanded(boolean isViewExpanded) {
this.isViewExpanded = isViewExpanded;
}
public FeedView(Context context, Feed feed) {
super(context);
this.feed = feed;
isViewExpanded = false;
init();
}
private void init() {
LayoutInflater mInflater = LayoutInflater.from(getContext());
view = mInflater.inflate(R.layout.collapsed_feed, this, true);
TextView feed_name = (TextView) view.findViewById(R.id.feed_name);
feed_name.setText(feed.feed_name);
ImageView feed_image = (ImageView) view.findViewById(R.id.feed_image);
String image_url = feed.feed_image_url;
ImageLoaderForFeeds imgLoaderForFeeds = new ImageLoaderForFeeds(getContext());
imgLoaderForFeeds.DisplayImage(image_url, feed_image);
if (feed.isFavourite)
{
TextView tv_add_to_favourite = (TextView) view.findViewById(R.id.tv_add_to_favourite);
ImageView iv_add_to_favourite = (ImageView) view.findViewById(R.id.img_add_to_favourite);
tv_add_to_favourite.setText(R.string.remove_from_favourite);
tv_add_to_favourite.setTextColor(Color.GRAY);
iv_add_to_favourite.setSelected(true);
}
RelativeLayout favourite_bar = (RelativeLayout) view.findViewById(R.id.add_to_favourite);
String tag = "FAVOURITE";
favourite_bar.setTag(tag);
}
public void toggleView(int length) {
if (!isViewExpanded)
expandView(length);
else
collapseView();
}
private void expandView(int length) {
}
public void collapseView() {
}
public List<Article> getArticleList() {
return articleList;
}
public void setArticleList(List<Article> articleList) {
this.articleList = articleList;
}
private void showArticleList() {
}
问题:我是否正确设计此课程?在我正在做的视图类中扩展XML是否可以。如果是的话,我是在正确的地方做的吗?还建议如果是更好的设计来实现这一点!
当我想出这门课时,我也遇到了一些问题,但我想这可能与之前的问题有关。
问题#1:有时我会在使用findViewById()
查找FeedView时发出问题,虽然正确设置了ID,但它会返回null。
问题#2:在动画FeedView类上,它会意外响应并出现几个尺寸缺陷。不知道为什么!