【问题标题】:Android - How to create clickable listview?Android - 如何创建可点击的列表视图?
【发布时间】:2012-10-28 04:28:33
【问题描述】:

我想让列表视图中的所有列表项打开一个新页面,因此每个列表视图项都打开一个我可以使用的新黑页。我根本不知道如何实现这一点。我已经连续搜索了几个小时,但找不到我的解决方案的答案。如果有人可以展示和/或解释如何执行此操作而不是提供链接,将不胜感激,但两者都有帮助。

到目前为止,这是我的代码:

  <string-array name="sections">
    <item >Pro Constructive</item>
    <item >Con Constructive</item>
    <item >1st Speaker Cross</item>
    <item >Pro Rebbutal</item>
    <item >Con Rebuttal</item>
    <item >2nd Speaker Cross</item>
    <item >Pro Summary</item>
    <item >Con Summary</item>
    <item >Grand Cross</item>
    <item >Pro Final Focus</item>
    <item >Con Final Focus</item>
</string-array>

这是在我的 string.xml 中

    <ListView
    android:id="@+id/listView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:entries="@array/sections" >
</ListView>

这是在我的 activity_main.xml 中。

我该从哪里开始才能使列表中的每个项目都可以点击并打开一个新页面?

提前致谢!

编辑:

Logcat 不再相关。

【问题讨论】:

    标签: java android eclipse listview clickable


    【解决方案1】:

    其实很简单:

    这是您的带有 ListView 的 Activity,它实现了一个 OnItemClickListener:

    public class MainActivity extends Activity implements OnItemClickListener {
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            setContentView(R.layout.activity_main);
    
            //* *EDIT* * 
            ListView listview = (ListView) findViewById(R.id.listView1);
            listview.setOnItemClickListener(this);
        }
    
        public void onItemClick(AdapterView<?> l, View v, int position, long id) {
            Log.i("HelloListView", "You clicked Item: " + id + " at position:" + position);
                // Then you start a new Activity via Intent
                Intent intent = new Intent();
                intent.setClass(this, ListItemDetail.class);
                intent.putExtra("position", position);
                // Or / And
                intent.putExtra("id", id);
                startActivity(intent);
        }
    

    编辑

    以上代码将放在您的 MainActivity.java 中。我将类的名称更改为 MainActivity 并将 contentView 更改为 setContentView(R.layout.activity_main) - 这些名称是 Eclipse 中新创建的 Android 项目的名称。
    另请参阅 //* Edit * 下的 2 行新行 - 它们将设置监听器以点击列表中的项目。

    您的 activity_main.xml 应如下所示:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
    
        <ListView
            android:id="@+id/listView1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:entries="@array/sections" >
        </ListView>
    </RelativeLayout>
    

    `res/values/` 文件夹中的 array.xml(不是 string.xml)如下所示

    <resources>
        <string-array name="sections">
            <item >Pro Constructive</item>
            <item >Con Constructive</item>
            <item >1st Speaker Cross</item>
            <item >Pro Rebbutal</item>
            <item >Con Rebuttal</item>
            <item >2nd Speaker Cross</item>
            <item >Pro Summary</item>
            <item >Con Summary</item>
            <item >Grand Cross</item>
            <item >Pro Final Focus</item>
            <item >Con Final Focus</item>
        </string-array>
    </resources>
    

    注意:如果您复制并粘贴此代码,它应该可以工作。但是由于您还没有创建ListItemDetail.class,所以单击一个项目会出现错误。

    这是一个示例:

    你的 ListItemDetail.java:

    public class ListItemDetail extends Activity {
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_listitem);
    
        Intent intent = getIntent();
        int position = intent.getIntExtra("position", 0);
    
        // Here we turn your string.xml in an array
        String[] myKeys = getResources().getStringArray(R.array.sections);
    
        TextView myTextView = (TextView) findViewById(R.id.my_textview);
        myTextView.setText(myKeys[position]);
    
    
        }
    
    }
    

    及其activity_listitem.xml

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/my_textview"/>
    
    </LinearLayout>
    

    如果你复制过去这段代码,它会起作用。

    【讨论】:

    • 对不起,我是新手。我会把它放在 string.xml 或 activity_main.xml 中,我会用我自己的信息替换其中的任何内容吗?
    • 好吧,就像你说的,它给了我一个错误,但我确实添加了 activity_listitem.xml 和 ListItemDetail.java,我不知道为什么应用程序 FC 的,特别是因为我没有错误。
    • 您确实在 /res/values/ 中创建了 array.xml 文件 - 没有错误,它只是在猜测:/ 在 eclipse 中再次尝试了我的代码,它可以工作
    • 为方便起见,我压缩了文件:ego.lu/stuff/listview.zip - 使用 www.virustotal.com 扫描以确保保存 ;) - .java 文件和 .xml 文件在其中跨度>
    • 好的,我会把你的和我的比较一下,稍后再报告。感谢您即使这样做,但您确实提供了真正的帮助。
    【解决方案2】:

    您可以像这样从 string.xml 中的数组填充列表视图

    String[] myKeys = getResources().getStringArray(R.array.sections);
    ListView mListView = (ListView)findViewById(R.id.listView1);
    mListView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myKeys));  
    

    点击listview项目是非常简单的方法。只需使用setOnItemClickListener

    mListView.setOnItemClickListener(new OnItemClickListener() 
    {
        public void onItemClick(AdapterView<?> arg0,View arg1, int position, long arg3) 
        {
    
            Intent n = new Intent(getApplicationContext(), yourclass.class);
            n.putExtra("position", position);
            startActivity(n);
        }
    });
    

    【讨论】:

      【解决方案3】:

      您使用onListItemClick 函数来设置加载下一个活动并传递任何数据的 Intent。

      public void onListItemClick(ListView parent, View view, int position, long id)
      {
          Intent intent = new Intent(this, AnotherActivity.class);
          intent.putExtra("position", position);
          startActivity(intent);
      }
      

      【讨论】:

        【解决方案4】:

        listView= (ListView) findViewById(R.id.listview);

        • 列表项

          listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
              @Override
              public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
          
                  if(position==0){
                      Intent i=new Intent(MainActivity.this,Main3Activity.class);
                      startActivity(i);
                  }
              }
          });
          

        【讨论】:

          【解决方案5】:
          1. 在 fragment.java 中使用数组适配器

          String[] menuItems = {"默认 C02", "默认 02"};

              ListView listView = (ListView) root.findViewById(R.id.main_menu);
          
              ArrayAdapter<String> listViewAdapter = new ArrayAdapter<String>(
                  getActivity()
                  ,android.R.layout.simple_list_item_1
                  ,menuItems
              );
          
              listView.setAdapter(listViewAdapter);
          
              listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
                  public void onItemClick(AdapterView<?> l, View v, int position, long id){
                      Log.i("menuItems", "You clicked Item: " + id + " at position:" + position);
          
          
          
                  }
              });
          

          【讨论】:

            猜你喜欢
            • 2014-09-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-02-01
            • 2011-04-22
            • 1970-01-01
            相关资源
            最近更新 更多