ListView自定义适配器OnClick启动URL链接

时间:2016-04-23 11:27:06

标签: java android listview android-studio

嗨,我正在尝试创建一个将用户发送到链接的onclick事件。但是,我无法弄清楚如何让它发挥作用。

这是我的自定义适配器getview功能

   public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        int rowType = getItemViewType(position);

        if (convertView == null) {
            holder = new ViewHolder();
            switch (rowType) {
                case TYPE_ITEM:
                    convertView = mInflater.inflate(R.layout.program_list, null);
                    holder.textView = (TextView) convertView.findViewById(R.id.textView1);
                    holder.imgView = (ImageView) convertView.findViewById(R.id.imageView1);
                    break;
                case TYPE_SEPARATOR:
                    convertView = mInflater.inflate(R.layout.program_header, null);
                    holder.textView = (TextView) convertView.findViewById(R.id.textSeparator);
                    break;
            }
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        if(imageData.get(position) == null) {
            holder.textView.setText(mData.get(position));
        }
        else {
            holder.textView.setText(mData.get(position));
            holder.imgView.setImageResource(imageData.get(position));
        }


        return convertView;
    }

我有一个带有url字符串的ArrayList。此ArrayList称为linkData。我尝试了多种方法,但无法弄清楚如何使其工作。我尝试在自定义适配器中添加这些函数1以返回url:

public String getLink(int position) {
    return linkData.get(position);
}

这在mainactivity.java中,其中m_listview是listview,mAdapter是自定义适配器

   m_listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            if (mAdapter.getLink(position) == null) {}
            else {
                String linked = mAdapter.getLink(position);
                Uri url = Uri.parse(linked);
                Intent intent = new Intent(Intent.ACTION_VIEW, url);
                startActivity(intent);
            }
        }
    });

}

然而,这只会导致我的应用程序崩溃而不是去任何地方。

非常感谢有关此事的任何帮助和专业知识。谢谢!

以下是请求的错误logcat。

04-23 10:18:01.528 1818-1818/com E/InputEventReceiver: Exception dispatching input event.
04-23 10:18:01.528 1818-1818/com E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback
04-23 10:18:01.530 1818-1818/com E/MessageQueue-JNI: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=www.aa.com/homePage.do?locale=en_US }
                                                                              at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1765)
                                                                              at android.app.Instrumentation.execStartActivity(Instrumentation.java:1485)
                                                                              at android.app.Activity.startActivityForResult(Activity.java:3736)
                                                                              at android.app.Activity.startActivityForResult(Activity.java:3697)
                                                                              at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:817)
                                                                              at android.app.Activity.startActivity(Activity.java:4007)
                                                                              at android.app.Activity.startActivity(Activity.java:3975)
                                                                              at com.MainActivity$2.onItemClick(MainActivity.java:91)
                                                                              at android.widget.AdapterView.performItemClick(AdapterView.java:300)
                                                                              at android.widget.AbsListView.performItemClick(AbsListView.java:1143)
                                                                              at android.widget.AbsListView$PerformClick.run(AbsListView.java:3044)
                                                                              at android.widget.AbsListView.onTouchUp(AbsListView.java:3845)
                                                                              at android.widget.AbsListView.onTouchEvent(AbsListView.java:3617)
                                                                              at android.view.View.dispatchTouchEvent(View.java:8388)
                                                                              at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2424)
                                                                              at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2158)
                                                                              at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
                                                                              at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172)
                                                                              at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
                                                                              at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172)
                                                                              at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
                                                                              at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172)
                                                                              at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
                                                                              at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172)
                                                                              at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
                                                                              at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172)
                                                                              at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
                                                                              at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172)
                                                                              at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2314)
                                                                              at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1692)
                                                                              at android.app.Activity.dispatchTouchEvent(Activity.java:2739)
                                                                              at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2275)
                                                                              at android.view.View.dispatchPointerEvent(View.java:8578)
                                                                              at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4021)
                                                                              at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3887)
                                                                              at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3449)
                                                                              at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3502)
                                                                              at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3468)
                                                                              at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3578)
                                                                              at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3476)
                                                                              at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3635)
                                                                              at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3449)
                                                                              at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3502)
                                                                              at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3468)
                                                                              at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3476)
                                                                              at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3449)
                                                                              at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5701)
                                                                              at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5675)
                                                                              at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5646)
                                                                              at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5791)
                                                                              at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
                                                                              at android.os.MessageQueue.nativePollOnce(Native Method)
                                                                            at android.os.Mes
04-23 10:18:01.530 1818-1818/com D/AndroidRuntime: Shutting down VM


                                                                        --------- beginning of crash
04-23 10:18:01.530 1818-1818/com E/AndroidRuntime: FATAL EXCEPTION: main
                                                                        Process: com, PID: 1818
                                                                        android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=www.aa.com/homePage.do?locale=en_US }
                                                                            at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1765)
                                                                            at android.app.Instrumentation.execStartActivity(Instrumentation.java:1485)
                                                                            at android.app.Activity.startActivityForResult(Activity.java:3736)
                                                                            at android.app.Activity.startActivityForResult(Activity.java:3697)
                                                                            at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:817)
                                                                            at android.app.Activity.startActivity(Activity.java:4007)
                                                                            at android.app.Activity.startActivity(Activity.java:3975)
                                                                            at com.MainActivity$2.onItemClick(MainActivity.java:91)
                                                                            at android.widget.AdapterView.performItemClick(AdapterView.java:300)
                                                                            at android.widget.AbsListView.performItemClick(AbsListView.java:1143)
                                                                            at android.widget.AbsListView$PerformClick.run(AbsListView.java:3044)
                                                                            at android.widget.AbsListView.onTouchUp(AbsListView.java:3845)
                                                                            at android.widget.AbsListView.onTouchEvent(AbsListView.java:3617)
                                                                            at android.view.View.dispatchTouchEvent(View.java:8388)
                                                                            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2424)
                                                                            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2158)
                                                                            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
                                                                            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172)
                                                                            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
                                                                            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172)
                                                                            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
                                                                            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172)
                                                                            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
                                                                            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172)
                                                                            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
                                                                            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172)
                                                                            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
                                                                            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172)
                                                                            at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2314)
                                                                            at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1692)
                                                                            at android.app.Activity.dispatchTouchEvent(Activity.java:2739)
                                                                            at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2275)
                                                                            at android.view.View.dispatchPointerEvent(View.java:8578)
                                                                            at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4021)
                                                                            at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3887)
                                                                            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3449)
                                                                            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3502)
                                                                            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3468)
                                                                            at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3578)
                                                                            at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3476)
                                                                            at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3635)
                                                                            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3449)
                                                                            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3502)
                                                                            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3468)
                                                                            at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3476)
                                                                            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3449)
                                                                            at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5701)
                                                                            at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5675)
                                                                            at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5646)
                                                                            at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5791)
                                                                            at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
                                                                            at android

1 个答案:

答案 0 :(得分:1)

试着这样: -

m_listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            if (mAdapter.getLink(position) == null) {}
            else {
                String linked = mAdapter.getLink(position);
                Uri url = Uri.parse("https://"+linked);
                Intent intent = new Intent(Intent.ACTION_VIEW, url);
                startActivity(intent);
            }
        }
    });

}