java - 从 ListActivity 条目启动 Intent - Android

标签 java android android-layout android-intent android-listview

我已经实现了一个 ListActivity,并且希望为列表中每个可能的项目选择启动不同的 intent

例如:

enter image description here

单击“关于”项应启动一个包含新 Activity 的 intent,单击“访问电话库”项应启动一个打开“电话库”的 intent(用于选择一个图片说)。

我想了解两件事:

  1. 如何确定点击了哪个项目,以便启动正确的 Intent
  2. 如何使列表中的项目在被选择时改变样式? (比如突出显示以便用户体验更好)

以下是MyActivity的代码(实现ListActivity):

public class MyActivity extends ListActivity implements OnItemClickListener 
{

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    { 

        super.onCreate(savedInstanceState);
        setContentView(R.layout.list_activity);

        ListView listView = (ListView) findViewById(android.R.id.list);

        listEntryClass listEntries[] = new listEntryClass[]
        {
            new listEntryClass( "About", "About" ),
            new listEntryClass( "Access Phone Gallery", "Access Gallery and Choose an Image" )
        };

        listEntryArrayAdapter adapter = new listEntryArrayAdapter(this, R.layout.list_entry_layout, listEntries);

        View header = (View)getLayoutInflater().inflate(R.layout.list_header_layout, null);
        TextView headerValue = (TextView) header.findViewById(R.id.list_header);
        headerValue.setText( this.getString(R.string.headerPrefs) );

        listView.addHeaderView(header);
        listView.setAdapter(adapter);

        listView.setOnItemClickListener( this );

    }

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

        Log.d(TAG, "Clicked an entry");
    }

}

我想在某个地方被点击的项目的id上应该有类似switch-case的东西,但不知道如何做到这一点。

最佳答案

如何确定点击了哪个项目,以便我可以启动正确的 Intent ?

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

       // Here position denotes which row index you clicked.
      //If you clicked first item in ListView then row index will be zero
     // and so on...

       switch (position) {
       case 0:
           //First Item/row clicked
           break;
       case 1:
           //Second Item/row clicked
           break;
       }
   }

如何使列表中的项目在被选择时改变样式? (比如突出显示以便用户体验更好)

至于设置颜色,您需要一个 StateListDrawable 。您可以使用 android:listSelector 属性在列表中进行设置,在 XML 中定义可绘制对象,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_enabled="false" android:state_focused="true"
        android:drawable="@drawable/item_disabled" />
  <item android:state_pressed="true"
        android:drawable="@drawable/item_pressed" />
  <item android:state_focused="true"
        android:drawable="@drawable/item_focused" />
</selector>

ListView xml will look like below.

<ListView android:id="@+id/list" 
      android:layout_width="fill_parent"
      android:layout_height="wrap_content" 
      android:dividerHeight="0dip"
      android:divider="@null" 
      android:listSelector="@drawable/list_selector"
      android:layout_gravity="center" />

关于java - 从 ListActivity 条目启动 Intent - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11290500/

相关文章:

java - 从可运行线程追加时 JTextArea 为空

java - Android 滚动列表后会选择多个单选按钮。改变其状态

android - Admob 对 Kivy 的支持(适用于 Android 的 Python)

java - fragment 切换还是多个 Activity ?

android - android 4.1.1 自定义通知中的选取框问题

java - 想要使用 selenium webdriver 代码单击下拉按钮

java - 从生物识别指纹考勤设备中检索数据

android - 我可以在 webview 中删除 Android 默认链接样式吗

java - 为什么我们使用回调接口(interface)而不是仅仅传递对 Activity 的引用

android - 具有自定义背景的按钮