如何在 Google Glass 上实现自定义 CardScrollView?
How to implement custom CardScrollView on Google Glass?
我尝试使用 CardScrollView 而不是单个 View.I 可以成功设置卡片(具有自定义布局)我 code.I 需要在收到新消息时更改我的 TextFields 的值来自我的 LocalBroadcastReceiver。你有什么想法吗how/where我可以解决吗?
这是我项目中的一些代码片段。
这是CardScrollView实现的activity中的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);
}
}
编辑
在 activity 启动时,我能够在两个定义的卡中都有一些值,但我仍然不确定如何从我的广播接收器更新数据。这里我修改了 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();
希望对您有所帮助
我尝试使用 CardScrollView 而不是单个 View.I 可以成功设置卡片(具有自定义布局)我 code.I 需要在收到新消息时更改我的 TextFields 的值来自我的 LocalBroadcastReceiver。你有什么想法吗how/where我可以解决吗?
这是我项目中的一些代码片段。
这是CardScrollView实现的activity中的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);
}
}
编辑 在 activity 启动时,我能够在两个定义的卡中都有一些值,但我仍然不确定如何从我的广播接收器更新数据。这里我修改了 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();
希望对您有所帮助