1

我是 Android 开发的新手,所以这是一个基本问题。

我想实现与联系人应用程序相同的行为。您有一个包含一系列联系人的 ListView | 电话图标。当您单击联系人姓名时,您有一种行为,当您单击电话图标时,您会出现另一种行为。

这是我的代码。任何帮助深表感谢。

总之,该方法有什么问题

switch (v.getId()) { case R.id.imageButtonAction:

活动课

public class CompaniesActivity extends Activity  {

MyApp app;

ListView listCompanies;

Cursor cursor;

// Adapter and its corresponding FROM and TO statements. The number and sequence of the arguments must match in FROM / TO arguments.
SimpleCursorAdapter adapter;
static final String[] FROM = { MenuNavigationData.C_COMPANY, MenuNavigationData.C_DESCRIPTION};
static final int[] TO = { R.id.textCompany, R.id.textDescription }; //

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

    //Gets a reference to the application
    app = (MyApp) getApplication();

    // Find your views
    listCompanies = (ListView) findViewById(R.id.listCompanies);

    addButton = (Button) findViewById(R.id.buttonAdd);

    // Add actions to user interaction
    listCompanies.setOnItemClickListener(new OnItemClickListener() {
        @Override
        **public void onItemClick(AdapterView<?> arg0, View v, int position, long id) {


            switch (v.getId()) {
                case R.id.imageButtonAction:
                    startActivity(new Intent(app, InstructionsActivity.class));
                    break;
                default:
                    int i = adapter.getItemViewType(position);
                    startActivity(new Intent(app, EditMenuNavigationActivity.class));
                    break;
            }**

        }
    });

}

活动 xml

<!-- Companies ListView-->
<ListView android:id="@+id/listView1" android:layout_height="wrap_content" android:layout_width="match_parent"></ListView>
<ListView 
    android:id="@+id/listCompanies"
    android:layout_height="match_parent"
    android:layout_width="match_parent" 
    android:layout_weight="1"
    android:background="#5555"/>

</LinearLayout>

行 xml

  android:background="#ffff"
  android:padding="6dip">

<!-- Company TextView  -->
<TextView 
    android:id="@+id/textCompany"

    android:text="TIM"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"

    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"

    android:singleLine="true"
    android:ellipsize="marquee"

    android:textColor="#c000"
    android:textStyle="bold"
    android:textSize="25sp"/>

<!-- Description TextView  -->
<TextView 
    android:id="@+id/textDescription" 

    android:layout_height="wrap_content" 
    android:layout_width="match_parent" 

    android:layout_below="@id/textCompany"
    android:layout_alignWithParentIfMissing="true"
    android:layout_alignParentLeft="true"

    android:singleLine="true"
    android:ellipsize="marquee"

    android:textColor="#c000"></TextView>

<!-- Action ImageView -->
<ImageView
    android:id="@+id/imageButtonAction"

    android:layout_height="wrap_content"
    android:layout_width="wrap_content"

    android:layout_alignParentTop="true"
    android:layout_alignParentRight="true"

    android:layout_gravity="right"
    android:background="@drawable/icon"/>

</RelativeLayout>
4

3 回答 3

0

您的 onItemClick() 回调接收特定视图及其位置(从 0 开始),每个都可以帮助您确定单击了哪个视图。该位置是您添加的项目的索引,对于更复杂的场景,您可以查看.setTag(Object o),并使用 getTag() 从回调中检索它。

于 2011-06-17T23:31:25.890 回答
0

我终于找到了解决方案。 这解决了这个问题。但又增加了一个。正如预期的那样,当用户单击不同的视图(TextView 或 ImageView)时,ListView 现在的行为有所不同。但它似乎没有反应。我必须“双击”才能触发 company.setOnClick 或 dial.setOnClick。有什么建议么?

// 为用户交互添加动作

listCompanies.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> arg0, View v, int position, long id) {

            TextView company = (TextView) v.findViewById(R.id.textCompany);
            ImageView dial = (ImageView) v.findViewById(R.id.imageButtonDTMFDial);

            company.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    startActivity(new Intent(app, EditMenuNavigationActivity.class));
                }
            });

            dial.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    startActivity(new Intent(app, InstructionsActivity.class));
                }
            });
        }
于 2011-06-29T06:07:48.287 回答
0

用更少的代码优雅地解决这个问题的新的更好的方法!!!

通过以下修改,用户界面响应速度更快,不再出现双击问题。:)

简单有效的代码要少得多!

对行 xml 的修改

插入一个线性布局以包装两者 在这个线性布局中,插入一个名为 android:onClick="editCompanyClick" 的标签,这是将在 Activity 中调用的点击处理程序。

插入一个Linear布局来包装在这个Linear布局中,插入一个名为android:onClick="dialClick"的标签,这是将在Activity中调用的点击处理程序。

Activity类的修改

删除之前的代码

   listCompanies.setOnItemClickListener(new OnItemClickListener() { @Override public void    onItemClick(AdapterView arg0, View v, int position, long id) {

            TextView company = (TextView) v.findViewById(R.id.textCompany);
            ImageView dial = (ImageView) v.findViewById(R.id.imageButtonDTMFDial);

            company.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    startActivity(new Intent(app, EditMenuNavigationActivity.class));
                }
            });

            dial.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    startActivity(new Intent(app, InstructionsActivity.class));
                }
            });
        }

插入代码

public void dialClick(View v) {
        startActivity(new Intent(app, InstructionsActivity.class));
    }

    public void editCompanyClick(View v) {
        startActivity(new Intent(app, EditMenuNavigationActivity.class));
record
    }

行 xml

 <?xml version="1.0" encoding="utf-8"?>
   <LinearLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="?android:attr/listPreferredItemHeight"

   android:padding="6dip" android:orientation="horizontal">
    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="match_parent" 
        android:id="@+id/linearLayout1" 
        android:orientation="vertical"
        android:onClick="editCompanyClick"
        android:layout_weight="1">
        <!-- Company TextView  -->
        <TextView android:singleLine="true" android:text="TIM" android:id="@+id/textCompany" android:ellipsize="marquee" android:layout_height="wrap_content" style="@android:style/TextAppearance.Medium" android:layout_width="match_parent" android:gravity="top"></TextView>
        <!-- Description TextView  -->
        <TextView android:singleLine="true" android:text="Chamar atendente" android:id="@+id/textDescription" android:ellipsize="marquee" android:layout_height="wrap_content" style="@android:style/TextAppearance.Small" android:layout_width="match_parent" android:gravity="bottom"></TextView>
    </LinearLayout>
    <LinearLayout 
        android:layout_height="match_parent" 
        android:id="@+id/linearLayout2"
        android:onClick="dialClick" 
        android:layout_width="wrap_content" android:layout_gravity="right">
        <!-- DTMFDial ImageView -->
        <ImageView android:layout_height="wrap_content" android:background="@drawable/icon" android:id="@+id/imageButtonDTMFDial" android:layout_gravity="right" android:layout_width="wrap_content"></ImageView>
    </LinearLayout>
   </LinearLayout>
于 2011-06-30T11:11:59.503 回答