【问题标题】:How to open link in a fragment with webview when a specific item is clicked from listview fragment从listview片段中单击特定项目时如何使用webview打开片段中的链接
【发布时间】:2018-05-25 11:30:43
【问题描述】:

我有一个带有菜单项的导航抽屉的 Android 应用程序。此菜单包含多个片段的条目。其中一个片段中有一个带有网站名称的列表视图。我的目标是,每当从该列表中单击网站名称时,与保存在 strings.xml 文件中的 stringarray 中的 listview 项相关联的链接都会在新片段中打开,其中 webview 会打开该网站。

到目前为止,我已经使用 listview 为片段实现了这段代码

class AtlasListFragment extends android.support.v4.app.ListFragment implements AdapterView.OnItemClickListener {
@Override
public View onCreateView(LayoutInflater inflater,
                         ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.atlas_list_fragment, container, false);
    return view;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    ArrayAdapter adapter = ArrayAdapter.createFromResource(getActivity(),
            R.array.tut_titles, android.R.layout.simple_list_item_1);
    setListAdapter(adapter);
    getListView().setOnItemClickListener(this);
}

@Override
public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
    Toast.makeText(getActivity(), "Item: " + position, Toast.LENGTH_SHORT).show();
}}

下面是从导航抽屉启动片段的代码

@Override
public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    int id = item.getItemId();
    android.support.v4.app.Fragment fragment = null;
    if (id == R.id.home) {
        fragment = frag;
     else if (id == R.id.settings) {
        fragment=new Settings();

    } else if (id == R.id.about_us) {
        fragment=new AboutUc();
    }
    else if(id == R.id.atlas){
        fragment = new AtlasListFragment();
    }
    else{

    }


    if (fragment!=null)
    {
        FragmentManager fragmentManager=getSupportFragmentManager();
        FragmentTransaction ft=fragmentManager.beginTransaction();

        ft.replace(R.id.fragmentview,fragment);
        ft.commit();
    }

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return true;
}

【问题讨论】:

    标签: android listview android-fragments


    【解决方案1】:

    通过这种方法,您可以在您想要使用 WebView 布局的地方打开一个 webview 并在您的活动中使用此方法

    public void openWebView(String url){   
    webView = (WebView) findViewById(R.id.webView1);
            webView.getSettings().setJavaScriptEnabled(true);
            webView.loadUrl(url);
    }
    

    希望对你有用

    【讨论】:

      【解决方案2】:
       First of all you will need broadcast so you can send your clicked
       URL from adapter to your fragment, and in your main fragment when you
       receive the url you can use intent or webview
      

      1- 创建 BroadcastHelper 类:

          public class BroadcastHelper {
               public static final String BROADCAST_EXTRA_METHOD_NAME = "INPUT_METHOD_CHANGED";
              public static final String ACTION_NAME = "hassan.hossam";
              private static final String UPDATE_LOCATION_METHOD = "updateLocation";
      
      
              public static void sendInform(Context context, String method) {
                  Intent intent = new Intent();
                  intent.setAction(ACTION_NAME);
                  intent.putExtra(BROADCAST_EXTRA_METHOD_NAME, method);
                  try {
                      context.sendBroadcast(intent);
                  } catch (Exception e) {
                      e.printStackTrace();
                  }
              }
      
              public static void sendInform(Context context, String method, Intent intent) {
                  intent.setAction(ACTION_NAME);
                  intent.putExtra(BROADCAST_EXTRA_METHOD_NAME, method);
                  try {
                      context.sendBroadcast(intent);
                  } catch (Exception e) {
                      e.printStackTrace();
                  }
              }
      
          }
      

      2- 从适配器发送意图

             holder.itemView.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      Intent url = new Intent("url");
                      url ("url_adapter",item.get(position).getURL());
                      BroadcastHelper.sendInform(context,"url",url);
                  }
              });
      

      3- 在您的片段中使用:

          Receiver receiver;
          boolean isReciverRegistered = false;
      
      
          @Override
          public void onResume() {
              super.onResume();
      
              if (receiver == null) {
                  receiver = new Receiver();
                  IntentFilter filter = new IntentFilter(BroadcastHelper.ACTION_NAME);
                  getActivity().registerReceiver(receiver, filter);
                  isReciverRegistered = true;
              }
          }
      
          @Override
          public void onDestroy() {
              if (isReciverRegistered) {
                  if (receiver != null)
                      getActivity().unregisterReceiver(receiver);
              }
              super.onDestroy();
          }
      
      
          private class Receiver extends BroadcastReceiver {
              @Override
              public void onReceive(Context arg0, Intent arg1) {
                  Log.v("r", "receive " + arg1.getStringExtra(BroadcastHelper.BROADCAST_EXTRA_METHOD_NAME));
                  String methodName = arg1.getStringExtra(BroadcastHelper.BROADCAST_EXTRA_METHOD_NAME);
                  if (methodName != null && methodName.length() > 0) {
                      Log.v("receive", methodName);
                      switch (methodName) {
      
                          case "url":
      
                              String url_adapter = arg1.getStringExtra("url_adapter");
                              Intent i = new Intent(Intent.ACTION_VIEW);
                              i.setData(Uri.parse(url_adapter));
                              startActivity(i);
                              break;
      
                          default:
                              break;
                      }
                  }
              }
          }
      

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 2018-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-18
        • 1970-01-01
        • 2021-04-11
        • 1970-01-01
        相关资源
        最近更新 更多