繁体   English   中英

如何在Google Glass上实现自定义CardScrollView?

[英]How to implement custom CardScrollView on Google Glass?

我尝试使用CardScrollView而不是单个View。我可以使用代码成功设置卡(具有自定义布局)。当从LocalBroadcastReceiver收到新消息时,我需要更改TextField的值。 您是否知道如何/在哪里解决?

这是我项目中的一些代码片段。

这是CardScrollView实现的活动中的onCreate方法。

private List<Integer> cards;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

    createCards();
    xDataScrollView = new CardScrollView(this);
    xDataScrollView.setAdapter(new XDataCardScrollAdapter(cards, getLayoutInflater()));
    xDataScrollView.activate();
    setContentView(xDataScrollView);

    LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, new IntentFilter("newMqttData")); 
    ...
}

使用以下createCards()方法

    public void createCards() {
    cards = new ArrayList<Integer>();
    cards.add(R.layout.x_general);
    cards.add(R.layout.x_temperatures);
}

还有这个CardScrollAdapter。

public class XDataCardScrollAdapter extends CardScrollAdapter{

private List<Integer> cards;
private LayoutInflater inflater;
private SingletonData data;

public XDataCardScrollAdapter(List<Integer> cards, LayoutInflater inflater){
    this.cards = cards;
    this.inflater = inflater;
    this.data = SingletonData.getInstance();
}
@Override
public int getCount() {
    return cards.size();
}

@Override
public Object getItem(int i) {
    return cards.get(i);
}

@Override
public View getView(int i, View view, ViewGroup viewGroup) {
    return inflater.inflate(cards.get(i),viewGroup,false);
}

@Override
public int getPosition(Object o) {
    return cards.indexOf(o);
}

}

编辑我可以在活动开始时在两个定义的卡中都具有一些值,但是我仍然不确定如何从广播接收器中更新数据。 这是我在XDataCardScrollAdapter中修改的getView方法。 甚至不知道这是否是可以接受的解决方案,或者这里可能出问题了。

@Override
public View getView(int i, View view, ViewGroup viewGroup) {
    if(view == null){
        view = inflater.inflate(cards.get(i), viewGroup);
    }
    if(i == 0){
        TextView textView_speed = (TextView) view.findViewById(R.id.textView_speed);
        textView_speed.setText(data.getSpeed());
    ... more values here
    }else if(i==1){
        TextView textView_temperatureValue = (TextView) view.findViewById(R.id.textView_temperatureValue);
        textView_temperatureValue.setText(data.getTemperature());
    ...more values here
    }
    return view;
}

在代码中,只需像平常一样通过查找视图然后将其更改为其他内容来更改数据即可。

我相信那应该为您做。 如果您尝试在运行时添加卡,则只需使用此方法通知适配器自上次以来您的数据列表已更改

xDataScrollView.getAdapter().notifyDataSetChanged();

希望能有所帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM