2015-05-05 30 views
0

我嘗試使用CardScrollView代替單個View.I可以使用我的代碼成功設置卡片(使用自定義佈局)。當我的LocalBroadcastReceiver發送新消息時,需要更改我的TextFields的值。你有一些想法我可以解決它嗎?如何在Google Glass上實現自定義CardScrollView?

下面是我的項目中的一些代碼片段。

這是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; 
} 

回答

0

在您的代碼中,只需通過查找視圖然後更改內容來更改數據。

我相信應該爲你做。如果你想在運行時添加卡,你只需要通知您的DataList控件使用此

xDataScrollView.getAdapter().notifyDataSetChanged(); 

希望幫助

+0

首先感謝您的回答,因爲上一次更改適配器。我昨天發現了notifyDataSetChanged()解決方案,這有所幫助。但是,這使得我的CardScrolLView(當我想滾動)有點慢。你正在談論尋找視圖。如何在CardScrollView中查找單個視圖?也許這是一個愚蠢的問題,但我沒有那麼有經驗。 – navacorn

+0

TextView t =(TextView)findViewById(R.id.textView_speed); t.setText(「5000」); 從我的廣播接收機工作。我甚至困惑爲什麼這個工作,但它的工作。謝謝。 – navacorn

相關問題