【问题标题】:ListView to open hyperlinks in androidListView 在 android 中打开超链接
【发布时间】:2013-09-15 22:49:36
【问题描述】:

有什么方法可以显示名称,例如 "TechCrunch" "Twit" "NASA" 在列表视图中,当用户点击其中一个时,它应该打开一个意图,其中列出了相应网站的链接。

任何想法表示赞赏。

【问题讨论】:

  • 我已经做到了,这并不是很困难,但是已经足够长了,我必须找到代码才能知道我做了什么。我最终得到了一个内部数据库,ListView 只是显示数据的一个子集并将数据库中的超链接应用到每一行。
  • 你有相应的网站存储在数据库中吗?
  • @Ahmad,我目前没有使用数据库。
  • @Abiessu :似乎是个好主意。我会试试这个。但我仍然想知道是否可以在没有数据库的情况下做到这一点。
  • @JPro:就像我说的,我不记得细节,但我想如果 ListView 能够显示的列表可以包含每个列表元素的多个项目,那么显示元素可以重写 ListView 的函数来处理数据。

标签: java android listview


【解决方案1】:

如果您不希望ListView 由数据库生成,并且您想自己将每个网站添加到您的ListView 的适配器,那么您可以执行以下操作。

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

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

然后像这样设置 ListView 的适配器:

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

现在将OnItemClickListener 设置为您的ListView

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

        String url = mAdapter.getItem(position).getLink();
        Intent i = new Intent(Intent.ACTION_VIEW);
        i.setData(Uri.parse(url));
        startActivity(i);
    }
});

【讨论】:

    【解决方案2】:

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

    1. 用户在 list_view 上看到的名称;
    2. 我们想要引导用户去的超链接。

    在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>
    

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

    当您的列表是动态的时,您可以使用以下方法来更新您的列表视图。

    • 将 onCreateView() 中的代码移到 onResume() 中。
    • sAdapter.notifyDataSetChanged();

    【讨论】:

      猜你喜欢
      • 2020-09-13
      • 2015-11-07
      • 1970-01-01
      • 2016-12-25
      • 2021-01-07
      • 2021-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多