簡體   English   中英

使用CardScrollView的Google Glass多個嵌入式布局

[英]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 :這使得可以為tv1tv2tv2設置文本,因為它們在視圖層次結構中。

由於尚未添加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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM