如何从listview片段

时间:2018-05-25 11:30:44

标签: android listview android-fragments

我有一个Android应用程序,带有带菜单项的导航抽屉。此菜单包含多个片段的条目。其中一个片段中有一个列表视图,其中包含网站名称。我的目标是每当从该列表中点击网站名称时,与string.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;
}

2 个答案:

答案 0 :(得分:0)

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

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

希望它适合你

答案 1 :(得分:-1)

 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 CLASS:

    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;
                }
            }
        }
    }
  

我希望这有帮助