首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用WebViews时将卡片定义为CardScrollView: Google

在使用WebViews时将卡片定义为CardScrollView: Google
EN

Stack Overflow用户
提问于 2015-07-13 22:04:02
回答 1查看 469关注 0票数 2

我正在尝试开发一个简单的玻璃示例(淹没),其中每张卡都在全屏上显示一个WebView (,而不是CardBuilder.Layout.EMBED_INSIDE中的)。

我遵循这个答案:INSIDE,但还不清楚在哪里设置webviews

我的代码如下:

代码语言:javascript
复制
public class MainActivity extends Activity
{
    private String cardPageOne = "file:///android_asset/one.html";
    private String cardPageTwo = "file:///android_asset/two.html";

    private CardScrollView mCardScrollView;
    private ExampleCardScrollAdapter mAdapter;
    private List<View> mCards;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        createCards();        // Setup webviews

        mCardScrollView = new CardScrollView(this);
        mAdapter = new ExampleCardScrollAdapter();
        mCardScrollView.setAdapter(mAdapter);
        mCardScrollView.activate();
        setContentView(mCardScrollView);
    }

    private void createCards() 
    {
        mCards = new ArrayList<>();

        WebView myWeb = (WebView)findViewById(R.id.webView);
        myWeb.getSettings().setJavaScriptEnabled(false);
        myWeb.loadUrl(filePath);

        mCards.add(myWeb);

        WebView myWeb2 = (WebView)findViewById(R.id.webView);
        myWeb2.getSettings().setJavaScriptEnabled(false);
        myWeb2.loadUrl(filePathAlt);

        mCards.add(myWeb2);
    }

    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()
        {
            // Is this correct? Each card will have a different (web)view
            return mCards.size();  
        }

        @Override
        public int getItemViewType(int position)
        {
            // Is this correct?
            return position;      
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) 
        {
             return mCards.get(position);
        }
    }
}

最后,我的webview.xml如下:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>

<WebView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/webView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"></WebView>

一旦代码到达,我就会得到一个java.lang.NullPointerException

代码语言:javascript
复制
myWeb.getSettings().setJavaScriptEnabled(false);

我认为这是因为myWeb没有被设置为content视图,因为我使用的是mCardScrollView。如果是,我可以在哪里以及如何设置我的can视图。

详细的错误是:

代码语言:javascript
复制
07-13 17:24:05.337  18117-18117/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.testwebviewscroller, PID: 18117
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.testwebviewscroller/com.testwebviewscroller.MainActivity}: java.lang.NullPointerException
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2224)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2273)
        at android.app.ActivityThread.access$800(ActivityThread.java:138)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1236)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:149)
        at android.app.ActivityThread.main(ActivityThread.java:5045)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
        at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.NullPointerException
        at com.testwebviewscroller.MainActivity$ExampleCardScrollAdapter.getView(MainActivity.java:101)
        at com.google.android.glass.widget.CardScrollView.loadView(CardScrollView.java:1351)
        at com.google.android.glass.widget.CardScrollView.addChildView(CardScrollView.java:1239)
        at com.google.android.glass.widget.CardScrollView.updateViewsInternal(CardScrollView.java:1131)
        at com.google.android.glass.widget.CardScrollView.updateViews(CardScrollView.java:1193)
        at com.google.android.glass.widget.CardScrollView.activate(CardScrollView.java:1589)
        at com.testwebviewscroller.MainActivity.onCreate(MainActivity.java:40)
        at android.app.Activity.performCreate(Activity.java:5235)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1089)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2188)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2273)
            at android.app.ActivityThread.access$800(ActivityThread.java:138)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1236)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:149)
            at android.app.ActivityThread.main(ActivityThread.java:5045)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
            at dalvik.system.NativeStart.main(Native Method)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-14 20:29:08

如果您想在您的卡中放置一个why视图,为什么不直接将您自己的视图膨胀到getView()重写方法中的每个项中呢?如果您不打算使用卡片提供的布局,您可以创建一个新的布局,并使用它。您的getView()应该是这样的:

代码语言:javascript
复制
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater layoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    convertView = layoutInflater.inflate(R.layout.webview, parent, false);

    //enter code here to handle custom view loading

    return convertView;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31394256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档