我正在尝试使用布局文件而不是cardbuilder。 目前我的第一张卡已经膨胀了。这将是您启动应用程序时用作卡片的卡片。
现在当你滚动到左边我想要显示我的下一张卡片。但是当我使用布局文件时,我似乎无法找到如何实现这一点。有任何人对此有经验吗?这对于沉浸式的btw。
这是我用来显示我的第一张卡片的代码。
@Override
public View getView(int i, View view, ViewGroup viewGroup)
{
View convertView;
LayoutInflater inflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.farmhouse_main, viewGroup);
return convertView;
}
在查看@EntryLevelDev提交的代码后,我编写了自己的CardScrollAdapter
我这样做是为了确保您只需要在插入或删除某张卡时在一种方法中进行更改。
我的适配器
public class MainAdapter extends CardScrollAdapter {
private List<CustomCard> mCards;
private LayoutInflater inflate;
public MainAdapter(List<CustomCard> cards, LayoutInflater inf)
{
this.mCards = cards;
this.inflate = inf;
}
@Override
public int getCount() {
return mCards.size();
}
@Override
public Object getItem(int i) {
return mCards.get(i);
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
int card = mCards.get(i).getContent();
view = inflate.inflate(card, viewGroup, false);
return view;
}
@Override
public int getPosition(Object o) {
return this.mCards.indexOf(o);
}
}
我的CustomCard类
public class CustomCard {
public int content;
public CustomCard(int content)
{
this.content = content;
}
public int getContent() {
return content;
}
}
然后在我的活动中,我创建了一种方法,将卡添加到列表中,并在设置适配器之前在我的onCreate()中调用此方法。
public void CreateCards()
{
mCards.add(new CustomCard(R.layout.card_simple_layout));
mCards.add(new CustomCard(R.layout.main_farmhouse));
}
这会被视为良好做法还是我应该采用不同的方式?请记住,这只是一个示例项目,我使用的项目EntryLevelDev用来玩它。
答案 0 :(得分:1)
您可以使用CardScrollView。
请参阅GDK文档:
on onCreate:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// create the CardScrollView set the adapter in onCreate
mCardScrollView = new CardScrollView(this);
mCardScrollView.setAdapter(new YourScrollAdapter());
// ...
}
适配器(这里我使用我的card_simple_layout布局。):
See the doc for more complete example of CardScrollAdapter
protected class YourScrollAdapter extends CardScrollAdapter {
//TODO override other CardScrollAdapter methods
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
LayoutInflater inflater = getLayoutInflater();
view = inflater.inflate(R.layout.card_simple_layout, parent, false);
ViewHolder viewHolder = new ViewHolder();
viewHolder.text = (TextView) view.findViewById(R.id.content);
view.setTag(viewHolder);
}
ViewHolder holder = (ViewHolder) view.getTag();
holder.text.setText(mOpeningDescription);
return view;
}
}
static class ViewHolder {
public TextView text;
}
编辑1:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (position == 0) {
View view = convertView;
if (view == null) {
LayoutInflater inflater = getLayoutInflater();
view = inflater.inflate(R.layout.card_simple_layout, parent, false);
ViewHolder viewHolder = new ViewHolder();
viewHolder.text = (TextView) view.findViewById(R.id.content);
view.setTag(viewHolder);
}
ViewHolder holder = (ViewHolder) view.getTag();
holder.text.setText(mOpeningDescription);
return view;
} else if (position == 1) {
return mContentView;
}
return null;
}
我的mContentView来自CardBuilder,它使用另一种布局。 所以现在我们有2张牌:一张是自定义布局,另一张是CardBuilder。
答案 1 :(得分:0)
我很确定你可以在getView&amp; amp;中使用LayoutInflater来充值卡片。 ViewHolder相应地作为Android开发中的传统方法,但即使是这样的事实也会存在一个主要的性能问题。滚动不会那么顺利,谷歌眼镜也可能会加热。
我还建议你使用CardScroller,CardScrollAdapter&amp; CardScrollView可获得更好的性能。
然而,为你的创造力竖起大拇指!!