滚动浏览 xml 个布局

scrolling through xml layouts

我正在尝试使用布局文件而不是 cardbuilder。 目前,我的第一张卡已经膨胀了。这将是您启动应用程序时用作卡片的卡片。

现在,当您向左滚动时,我想展示我的下一张卡片。但是,当我使用布局文件时,我似乎找不到如何实现这一点。这个事情谁有经验?顺便说一句,这是为了沉浸。

这是我用来展示我的第一张卡片的代码。

 @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);
}
}

我的定制卡class

public class CustomCard {
public int content;


public CustomCard(int content)
{
    this.content = content;
}

public int getContent() {
    return content;
}
}

然后在我的 activity 中,我创建了一个方法来将卡片添加到列表中,并在设置适配器之前在我的 onCreate() 中调用了这个方法。

public void CreateCards()
{
    mCards.add(new CustomCard(R.layout.card_simple_layout));
    mCards.add(new CustomCard(R.layout.main_farmhouse));
}

这会被认为是好的做法还是我应该采取不同的方式?请记住,这只是一个示例项目,我使用了 EntryLevelDev 项目来玩弄它。

您可以为此使用 CardScrollView。

请参阅 GDK 文档:

在 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。

See a full example on Github.

我很确定你可以在 getView 和 ViewHolder 中相应地使用 LayoutInflater 将卡片充气,作为 Android 开发中的传统方法,但即便如此,这样做也会存在重大性能问题.滚动不会那么顺畅,而且 Google 玻璃可能会发热。

我还建议您使用 CardScroller、CardScrollAdapter 和 CardScrollView 以获得更好的性能。

不过,为你的创意点赞!!