Java 在android中打开超链接的ListView

Java 在android中打开超链接的ListView,java,android,listview,Java,Android,Listview,有没有什么方法可以显示这样的名字 “TechCrunch” “笨蛋” “美国宇航局” 在listview中,当用户单击其中一个时,应该打开一个意图,并列出相应网站的链接 任何想法都值得赞赏。如果您不希望列表视图由数据库生成,并且希望自己将每个网站添加到列表视图的适配器中,则可以执行以下操作 您必须创建一个项类,如下所示: public class Item { private String mName; private int mLink; public Item

有没有什么方法可以显示这样的名字

“TechCrunch”
“笨蛋”
“美国宇航局”
在listview中,当用户单击其中一个时,应该打开一个意图,并列出相应网站的链接


任何想法都值得赞赏。

如果您不希望
列表视图
由数据库生成,并且希望自己将每个网站添加到
列表视图
的适配器中,则可以执行以下操作

您必须创建一个
类,如下所示:

public class Item {

    private String mName;
    private int mLink;

    public Item(String name, int link) {

        this.mName = name;
        this.mLink = link;
    }

    public int getLink() {

        return mLink;
    }

    public void setLink(int link) {

        this.mLink = link;
    }

    public String getName() {

        return mName;
    }

    public void setName(String name) {

        this.mName = name;
    }

    @Override
    public String toString() {

        return this.mName;
    }
}
List<Item> dataForTheAdapter = new ArrayList<Item>();

// add some data
dataForTheAdapter.add(new Item("Apple", "www.Apple.com"));
dataForTheAdapter.add(new Item("Microsoft", "www.Microsoft.com"));
dataForTheAdapter.add(new Item("Google", "www.Google.com"));

mContext = MyActivity.this;
// R.layout.row is a layout, that contains only one TextView
mAdapter = new ArrayAdapter<Item>(mContext, R.layout.row, dataForTheAdapter);

ListView listView = (ListView) findViewById(R.id.listView);
listView.setAdapter(mAdapter);
然后按如下方式设置ListView的适配器:

public class Item {

    private String mName;
    private int mLink;

    public Item(String name, int link) {

        this.mName = name;
        this.mLink = link;
    }

    public int getLink() {

        return mLink;
    }

    public void setLink(int link) {

        this.mLink = link;
    }

    public String getName() {

        return mName;
    }

    public void setName(String name) {

        this.mName = name;
    }

    @Override
    public String toString() {

        return this.mName;
    }
}
List<Item> dataForTheAdapter = new ArrayList<Item>();

// add some data
dataForTheAdapter.add(new Item("Apple", "www.Apple.com"));
dataForTheAdapter.add(new Item("Microsoft", "www.Microsoft.com"));
dataForTheAdapter.add(new Item("Google", "www.Google.com"));

mContext = MyActivity.this;
// R.layout.row is a layout, that contains only one TextView
mAdapter = new ArrayAdapter<Item>(mContext, R.layout.row, dataForTheAdapter);

ListView listView = (ListView) findViewById(R.id.listView);
listView.setAdapter(mAdapter);

如果您不希望数据库生成
列表视图
,并且希望自己将每个网站添加到
列表视图
的适配器中,则可以执行以下操作

您必须创建一个
类,如下所示:

public class Item {

    private String mName;
    private int mLink;

    public Item(String name, int link) {

        this.mName = name;
        this.mLink = link;
    }

    public int getLink() {

        return mLink;
    }

    public void setLink(int link) {

        this.mLink = link;
    }

    public String getName() {

        return mName;
    }

    public void setName(String name) {

        this.mName = name;
    }

    @Override
    public String toString() {

        return this.mName;
    }
}
List<Item> dataForTheAdapter = new ArrayList<Item>();

// add some data
dataForTheAdapter.add(new Item("Apple", "www.Apple.com"));
dataForTheAdapter.add(new Item("Microsoft", "www.Microsoft.com"));
dataForTheAdapter.add(new Item("Google", "www.Google.com"));

mContext = MyActivity.this;
// R.layout.row is a layout, that contains only one TextView
mAdapter = new ArrayAdapter<Item>(mContext, R.layout.row, dataForTheAdapter);

ListView listView = (ListView) findViewById(R.id.listView);
listView.setAdapter(mAdapter);
然后按如下方式设置ListView的适配器:

public class Item {

    private String mName;
    private int mLink;

    public Item(String name, int link) {

        this.mName = name;
        this.mLink = link;
    }

    public int getLink() {

        return mLink;
    }

    public void setLink(int link) {

        this.mLink = link;
    }

    public String getName() {

        return mName;
    }

    public void setName(String name) {

        this.mName = name;
    }

    @Override
    public String toString() {

        return this.mName;
    }
}
List<Item> dataForTheAdapter = new ArrayList<Item>();

// add some data
dataForTheAdapter.add(new Item("Apple", "www.Apple.com"));
dataForTheAdapter.add(new Item("Microsoft", "www.Microsoft.com"));
dataForTheAdapter.add(new Item("Google", "www.Google.com"));

mContext = MyActivity.this;
// R.layout.row is a layout, that contains only one TextView
mAdapter = new ArrayAdapter<Item>(mContext, R.layout.row, dataForTheAdapter);

ListView listView = (ListView) findViewById(R.id.listView);
listView.setAdapter(mAdapter);

基本上,您需要两个字符串数组:

  • 用户在列表视图上看到的名称
  • 我们想要引导用户去的超链接 在array.xml中:

    <string-array name="search_provider_name_array">
        <item>Google</item>
        <item>Yahoo</item>
        <item>Bing</item>
        <item>Baidu</item>
    </string-array>
    <string-array name="search_provider_link_array">
        <item>https://www.google.com</item>
        <item>https://www.yahoo.com</item>
        <item>https://www.bing.com</item>
        <item>https://www.baidu.com</item>
    </string-array>
    
    
    谷歌
    雅虎
    宾
    百度
    https://www.google.com
    https://www.yahoo.com
    https://www.bing.com
    https://www.baidu.com
    
    在layout_search_provider.xml中,它包含一个列表视图:

    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/lv_search"
        android:dividerHeight="1dp"/>
    
    
    
    在您的活动中:

    public class SearchProvider implements  AdapterView.OnItemClickListener {
        private ListView lv_search;
        private String[] names = getResources().getStringArray(R.array.search_provider_name_array);
        private String[] links = getResources().getStringArray(R.array.search_provider_link_array);
    
        //..
    
        @Override
        public View onCreateView(View v, String name, Context context, AttributeSet attrs) {
            lv_search= (ListView) v.findViewById(R.id.lv_search);
    
            ArrayAdapter sAdapter = new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, names);
            lv_search.setAdapter(sAdapter);
            lv_search.setOnItemClickListener(this);
    
            return v;
        }
    
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            if(i<links.length){
                Uri uri = Uri.parse(links[i]); 
                Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                startActivity(intent);
            }
        }
    
    }
    
    公共类SearchProvider实现AdapterView.OnItemClickListener{
    私有ListView lv_搜索;
    私有字符串[]名称=getResources().getStringArray(R.array.search\u provider\u name\u array);
    私有字符串[]links=getResources().getStringArray(R.array.search\u provider\u link\u array);
    //..
    @凌驾
    创建视图的公共视图(视图v、字符串名称、上下文上下文、属性集属性){
    lv_search=(ListView)v.findViewById(R.id.lv_search);
    ArrayAdapter sAdapter=新的ArrayAdapter(getActivity(),android.R.layout.simple_list_item_1,name);
    lv_搜索设置适配器(sAdapter);
    lv_search.setonicmclicklistener(本);
    返回v;
    }
    @凌驾
    公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
    
    如果(i基本上需要两个字符串数组:

  • 用户在列表视图上看到的名称
  • 我们想要引导用户去的超链接
  • 在array.xml中:

    <string-array name="search_provider_name_array">
        <item>Google</item>
        <item>Yahoo</item>
        <item>Bing</item>
        <item>Baidu</item>
    </string-array>
    <string-array name="search_provider_link_array">
        <item>https://www.google.com</item>
        <item>https://www.yahoo.com</item>
        <item>https://www.bing.com</item>
        <item>https://www.baidu.com</item>
    </string-array>
    
    
    谷歌
    雅虎
    宾
    百度
    https://www.google.com
    https://www.yahoo.com
    https://www.bing.com
    https://www.baidu.com
    
    在layout_search_provider.xml中,它包含一个列表视图:

    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/lv_search"
        android:dividerHeight="1dp"/>
    
    
    
    在您的活动中:

    public class SearchProvider implements  AdapterView.OnItemClickListener {
        private ListView lv_search;
        private String[] names = getResources().getStringArray(R.array.search_provider_name_array);
        private String[] links = getResources().getStringArray(R.array.search_provider_link_array);
    
        //..
    
        @Override
        public View onCreateView(View v, String name, Context context, AttributeSet attrs) {
            lv_search= (ListView) v.findViewById(R.id.lv_search);
    
            ArrayAdapter sAdapter = new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, names);
            lv_search.setAdapter(sAdapter);
            lv_search.setOnItemClickListener(this);
    
            return v;
        }
    
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            if(i<links.length){
                Uri uri = Uri.parse(links[i]); 
                Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                startActivity(intent);
            }
        }
    
    }
    
    公共类SearchProvider实现AdapterView.OnItemClickListener{
    私有ListView lv_搜索;
    私有字符串[]名称=getResources().getStringArray(R.array.search\u provider\u name\u array);
    私有字符串[]links=getResources().getStringArray(R.array.search\u provider\u link\u array);
    //..
    @凌驾
    创建视图的公共视图(视图v、字符串名称、上下文上下文、属性集属性){
    lv_search=(ListView)v.findViewById(R.id.lv_search);
    ArrayAdapter sAdapter=新的ArrayAdapter(getActivity(),android.R.layout.simple_list_item_1,name);
    lv_搜索设置适配器(sAdapter);
    lv_search.setonicmclicklistener(本);
    返回v;
    }
    @凌驾
    公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
    
    如果(我已经完成了,这并不困难,但我需要找到代码才能知道我做了什么。我最终得到了一个内部数据库,ListView只是显示了数据的一个子集,并将数据库中的超链接应用到每一行。数据库中是否存储了相应的网站?@Ahmad,我现在没有使用数据库。@Abiessu:似乎是个好主意。我会尝试一下。但我仍然想知道,如果不使用数据库,是否可以做到这一点。@JPro:正如我所说,我不记得细节,但我可以想象,如果ListView能够显示的列表可以包含每个列表元素的多个项目,那么可以重写ListView的isplay元素函数来处理数据。我已经完成了,这并不困难,但已经足够长了,我必须找到代码才能知道我做了什么。我最终得到了一个内部数据库,ListView只是显示了数据的一个子集,并将超链接从数据库应用到了数据库每行。你有相应的网站存储在数据库中吗?@Ahmad,我现在没有使用数据库。@Abiessu:似乎是个好主意。我会试试。但我还是想知道,如果没有数据库的话,是否可以这样做。@JPro:就像我说的,我不记得细节,但我会想象如果列表中的ListView是显示的pable可以包含每个列表元素的多个项目,然后可以重写ListView的display元素函数来处理数据。