如何解决当用户单击ListView中的不同视图时,如何实现不同的行为?
| 我是Android开发的新手,所以这是一个基本问题。 我想实现与“联系人”应用程序中相同的行为。您有一个带有一系列联系人的ListView |电话图标。单击联系人姓名时,有一种行为,而单击电话图标时,有另一种行为。 这是我的代码。 任何帮助深表感谢。 总之,该方法有什么问题 切换(v.getId()){ 案例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>
解决方法
您的onItemClick()回调既可以接收特定视图,也可以接收其位置(基于0的位置),每一个都可以帮助您确定单击了哪个视图。该位置是添加项的索引,对于更复杂的场景,您可以查看.setTag(Object o),并使用getTag()从回调中检索它。
, 一种新的更好的方法,用更少的代码优雅地解决了这个问题!!!
经过以下修改,用户界面的响应速度更快,不再出现双击问题。 :)
简单得多的代码就更少了!
对行xml的修改
插入线性布局以将两个
在此线性布局中,插入名为android:onClick = \“ editCompanyClick \”的代码
这是将在“活动”中调用的点击处理程序。
插入线性布局以包装
在此线性布局中,插入名为android:onClick = \“ dialClick \”的代码
这是将在“活动”中调用的点击处理程序。
对活动类的修改
删除以前的代码
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>
, 我终于找到了解决方案。
这样就解决了问题。但是又增加了一个。正如预期的那样,当用户单击不同的视图(TextView或ImageView)时,ListView现在的行为有所不同。
但是似乎没有反应。我必须“双击”才能触发company.setOnClick或Dial.setOnClick。有什么建议么?
//将动作添加到用户交互
listCompanies.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0,InstructionsActivity.class));
}
});
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。