Android - 如何创建可点击的列表视图?

Mic*_*reu 11 java eclipse android listview clickable

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

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

  <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>
Run Code Online (Sandbox Code Playgroud)

这是在我的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>
Run Code Online (Sandbox Code Playgroud)

这是在我的activity_main.xml中.

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

提前致谢!

编辑:

Logcat不再相关.

小智 31

事实上它很容易:

这是您使用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);
    }
Run Code Online (Sandbox Code Playgroud)

编辑

上面的代码将放在您的MainActivity.java中.我将类的名称更改为MainActivity,将contentView更改为setContentView(R.layout.activity_main)- 这些名称是Eclipse中新创建的Android项目的名称.
另请参阅//*Edit*下的2个新行- 这些行将设置Listener以获取列表中项目的点击次数.

您的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>
Run Code Online (Sandbox Code Playgroud)

`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>
Run Code Online (Sandbox Code Playgroud)

注意:如果您复制并粘贴此代码,它应该可以工作.但是你会因点击一个项而得到错误,因为你还没有创建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]);


    }

}
Run Code Online (Sandbox Code Playgroud)

以及它的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>
Run Code Online (Sandbox Code Playgroud)

如果您复制过去这段代码就行了.