【问题标题】:Android Studio listview, intentAndroid Studio 列表视图,意图
【发布时间】:2015-11-06 03:16:48
【问题描述】:

我正在制作一个非常简单的应用程序,它显示 100 个随机数,当在列表视图中单击一个数字时,它会启动一个 Web 浏览器。我很确定我已经完成了所有工作并且可以正常工作,但是无论如何要将相同的意图与列表中的每个数字/位置联系起来吗?除了 switch 语句?如果需要,我会做一个 switch 语句,但 100 个数字很多。哈哈。对于我的生活,我不知道该怎么做。循环会起作用吗?我只使用 Android Studio 大约两个月。在此先感谢您的帮助。

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

    switch ( position ) {
        case 0: String link = "https://duckduckgo.com/";
            Uri uri = Uri.parse(link);
            Intent viewIntent = new Intent(Intent.ACTION_VIEW, uri);
            startActivity(viewIntent);
    }

    String link = "https://duckduckgo.com/";
    Uri uri = Uri.parse(link);


    Intent viewIntent = new Intent(Intent.ACTION_VIEW, uri);
    startActivity(viewIntent);
}


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_assignment4);

    ListView ListViewNumbers = (ListView) findViewById(R.id.ListViewNumbers);


    Random ran = new Random();
    List<Integer> nums = new ArrayList<>(100);
        for(int i = 0; i < 100; i++){
            Integer r = ran.nextInt();
            nums.add(r);
        }

    ArrayAdapter<Integer> adapter = new ArrayAdapter<Integer>(this, R.layout.num_list_layout, nums);
    ListViewNumbers.setAdapter(adapter);


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_assignment4, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

}

【问题讨论】:

  • 你的意思是每个项目都有不同的uri?
  • 每个项目都可以有相同的 uri,我只需要一种方法来设置所有 100 个数字的意图,而无需输入 100 个案例。哈哈。
  • 如果意图相同,为什么不提前创建一个意图并在onItemClick上启动它。
  • @BHP90 所有项目都有相同的 url,那么你为什么关心位置编号?为什么不在没有switch case 的情况下对 onItemClick 事件开始新的意图?
  • 这对我来说都是一次学习经历。哈哈。我感谢你们的帮助。如果我在 onItemClick 中使用 url/uri 声明意图,它会在单击列表视图时启动网页?

标签: android listview android-intent


【解决方案1】:

你为什么不在你的开关盒中使用默认值?这是给你的代码

  switch ( position ) {
        case 0: String link = "https://duckduckgo.com/";
            Uri uri = Uri.parse(link);
            Intent viewIntent = new Intent(Intent.ACTION_VIEW, uri);
            startActivity(viewIntent);
            break;
        default:   
               String link = "https://duckduckgo.com/";
            Uri uri = Uri.parse(link);
            Intent viewIntent = new Intent(Intent.ACTION_VIEW, uri);
            startActivity(viewIntent);
          break; 
    } 

【讨论】:

  • 这是否可行,以便无论单击列表视图上的哪个项目,它都会进入意图?
  • 试一试.. 有什么好松的?
【解决方案2】:

如何在您的strings.xml 中声明string-array,然后您可以将其作为String[] 并将其分配给您的adapter 项目。我认为这要容易得多。

<string-array name="uri_list">
    <item>uri1</item>
    <item>uri2</item>
    ....
    <item>uri100</item>
</string-array>

【讨论】:

    【解决方案3】:

    您在 strings.xml 中声明了 string-array 每个项目都是一个 url。并且依靠onItemClick的位置,可以从字符串数组中提取url。

    【讨论】:

      【解决方案4】:

      试试这个

      MyListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) {// put de code if you intent here thats all } });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-24
        • 2014-05-20
        相关资源
        最近更新 更多