[英]Google Glass Multiple Embedded Layout using CardScrollView
即時消息的作用是我正在使用EMBEDDED LAYOUT在Google Glass中使用CardScrollView插入卡片,因為卡片生成器中尚未提供表格布局。 假設每個表都有1個textView。 發生的是,當我插入1-3布局時,沒有任何錯誤,但是當我插入第4個布局時,在此行中給了我java.lang.NullPointerException。
tv4.setText('Value for table 4');
這是我的代碼:
注意:我在每個表中至少有5個TextView。 在這里使其簡單。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
createCards();
mCardScrollView = new CardScrollView(this);
mAdapter = new ExampleCardScrollAdapter();
mCardScrollView.setAdapter(mAdapter);
mCardScrollView.activate();
setContentView(mCardScrollView);
TextView tv1 = (TextView) findViewById(R.id.textView1);
TextView tv2 = (TextView) findViewById(R.id.textView2);
TextView tv3 = (TextView) findViewById(R.id.textView3);
TextView tv4 = (TextView) findViewById(R.id.textView4);
tv1.setText('Value for table 1');
tv2.setText('Value for table 2');
tv3.setText('Value for table 3');
tv4.setText('Value for table 4');
}
private void createCards(){
mCards = new ArrayList<CardBuilder>();
mCards.add(new CardBuilder(this, CardBuilder.Layout.EMBED_INSIDE)
.setEmbeddedLayout(R.layout.activity_layout1)
.setFootnote("TABLE 1"));
mCards.add(new CardBuilder(this, CardBuilder.Layout.EMBED_INSIDE)
.setEmbeddedLayout(R.layout.activity_layout2)
.setFootnote("TABLE 2"));
mCards.add(new CardBuilder(this, CardBuilder.Layout.EMBED_INSIDE)
.setEmbeddedLayout(R.layout.activity_layout3)
.setFootnote("TABLE 3"));
mCards.add(new CardBuilder(this, CardBuilder.Layout.EMBED_INSIDE)
.setEmbeddedLayout(R.layout.activity_layout4)
.setFootnote("TABLE 4"));
}
private class ExampleCardScrollAdapter extends CardScrollAdapter {
@Override
public int getPosition(Object item) {
return mCards.indexOf(item);
}
@Override
public int getCount() {
return mCards.size();
}
@Override
public Object getItem(int position) {
return mCards.get(position);
}
@Override
public int getViewTypeCount() {
return CardBuilder.getViewTypeCount();
}
@Override
public int getItemViewType(int position){
return mCards.get(position).getItemViewType();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return mCards.get(position).getView(convertView, parent);
}
}
activity_layout1
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal" >
<TableRow>
<TextView
android:padding="3dip"
android:textSize="20sp"
android:text="@string/textViewTitle1"
android:textColor="@color/muted" />
<TextView
android:id="@+id/textView1"
android:gravity="right"
android:padding="3dip"
android:textSize="20sp" />
</TableRow>
</TableLayout>
activity_layout2
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal" >
<TableRow>
<TextView
android:padding="3dip"
android:textSize="20sp"
android:text="@string/textViewTitle2"
android:textColor="@color/muted" />
<TextView
android:id="@+id/textView2"
android:gravity="right"
android:padding="3dip"
android:textSize="20sp" />
</TableRow>
</TableLayout>
activity_layout3
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal" >
<TableRow>
<TextView
android:padding="3dip"
android:textSize="20sp"
android:text="@string/textViewTitle4"
android:textColor="@color/muted" />
<TextView
android:id="@+id/textView3"
android:gravity="right"
android:padding="3dip"
android:textSize="20sp" />
</TableRow>
</TableLayout>
activity_layout4
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal" >
<TableRow>
<TextView
android:padding="3dip"
android:textSize="20sp"
android:text="@string/textViewTitle4"
android:textColor="@color/muted" />
<TextView
android:id="@+id/textView4"
android:gravity="right"
android:padding="3dip"
android:textSize="20sp" />
</TableRow>
</TableLayout>
適配器
private class ExampleCardScrollAdapter extends CardScrollAdapter {
@Override
public int getPosition(Object item) {
return mCards.indexOf(item);
}
@Override
public int getCount() {
return mCards.size();
}
@Override
public Object getItem(int position) {
return mCards.get(position);
}
@Override
public int getViewTypeCount() {
return CardBuilder.getViewTypeCount();
}
@Override
public int getItemViewType(int position){
return mCards.get(position).getItemViewType();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return mCards.get(position).getView(convertView, parent);
}
}
請幫忙,因為我在這里待了幾天。 謝謝!
您為各種視圖設置文本的方式有些錯誤。
崩潰的原因是CardScrollView
當前一次檢索5個Views
,其中任一方向當前為1個。 由於CardScrollView
從位置0開始,因此僅加載位置0、1和2的Views
:這使得可以為tv1
, tv2
和tv2
設置文本,因為它們在視圖層次結構中。
由於尚未添加tv4
,因此嘗試檢索View
將返回null
。
由於CardScrollView
中的每個卡CardScrollView
具有相同的布局,因此您無需創建4個單獨的卡並將其初始化在onCreate
。 相反,您應在需要時為“ Views
充氣,並適當設置文本或其他數據。
card_layout.xml
:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal" >
<TableRow>
<TextView
android:padding="3dip"
android:textSize="20sp"
android:text="@string/textViewTitle"
android:textColor="@color/muted" />
<TextView
android:id="@+id/textView"
android:gravity="right"
android:padding="3dip"
android:textSize="20sp" />
</TableRow>
</TableLayout>
Adapter
:
private class ExampleCardScrollAdapter extends CardScrollAdapter {
@Override
public int getPosition(Object item) {
return mTexts.indexOf(item);
}
@Override
public int getCount() {
return mTexts.size();
}
@Override
public Object getItem(int position) {
return mTexts.get(position);
}
@Override
public int getViewTypeCount() {
return 1;
}
@Override
public int getItemViewType(int position){
return CardBuilder.EMBED_INSIDE.ordinal();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = new CardBuilder(this, CardBuilder.Layout.EMBED_INSIDE)
.setEmbeddedLayout(R.layout.card_layout)
.setFootnote("TABLE " + position)
.getView(convertView, parent);
TextView textView = view.findViewById(R.id.textView);
textView.setText(mTexts.get(position));
return view;
}
}
然后,在您的Activity
:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
createTexts();
mCardScrollView = new CardScrollView(this);
mAdapter = new ExampleCardScrollAdapter();
mCardScrollView.setAdapter(mAdapter);
mCardScrollView.activate(); // This should be moved in onResume.
setContentView(mCardScrollView);
}
private void createTexts(){
mTexts = new ArrayList<String>();
mTexts.add("Value for table 1");
mTexts.add("Value for table 2");
mTexts.add("Value for table 3");
mTexts.add("Value for table 4");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.