3

有没有办法像 "TechCrunch" "Twit" "NASA" 在列表视图中一样显示名称,当用户单击其中一个时,它应该打开一个带有列出的相应网站链接的意图。

任何想法表示赞赏。

4

2 回答 2

3

如果您不希望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);
    }
});
于 2013-09-15T23:26:57.583 回答
1

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

  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();
于 2015-11-20T12:43:35.240 回答