基本上我是Android新手,对它了解不多。我正在制作一个测验程序,其中我使用 customListView
和 5 个 custom TextViews
,一个用于问题,另外 4 个用于选项。我的问题是我希望TextView
可点击LisView
模式和选择模式一样单一。也就是说,如果我单击一个文本,所有其他TextView
s 应该变得不可点击。我的问题是每当我单击TextView
子布局中的 a 时,只有外部布局,即被ListView
选中的项目。这是我的列表视图的屏幕截图
5 回答
你可以通过两种方式做到这一点:
1.像这样直接使用 onClickListener :
textView.setOnClickListener(new View.OnClickListener(
public void onClick(View arg0) {
// Do anything here.
}
});
或者
2.在XML
文件中,在声明中<TextView />
再添加一个属性:
android:onClick="onClickTextView"
并在您的活动中,添加此功能:
public void onClickTextView(View view) {
// Do anything here.
}
更新:
使用以下代码获取 TextView 上的点击事件:
// Click event for single list row
getListView().setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
TextView tv = (TextView) (findViewById(R.id.title));
if (tv != null) {
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "CLICKED",
Toast.LENGTH_LONG).show();
}
});
} else {
Toast.makeText(MainActivity.this, "TV not found",
Toast.LENGTH_LONG).show();
}
}
});
假设您扩展 BaseAdapter 以设置列表视图内容 ->
打开当前持有者位置的TextView监听器和settag,在onclick方法中执行你的操作。
试试这个 :
当您选择一个文本视图时,其他三个将不可点击
final TextView texta = (TextView) findViewById(R.id.text_a);
final TextView textb = (TextView) findViewById(R.id.text_b);
final TextView textc = (TextView) findViewById(R.id.text_c);
final TextView textd = (TextView) findViewById(R.id.text_d);
texta.setOnClickListener(new OnClickListener()
{
public void onClick(View v) {
textb.setClickable(false);
textc.setClickable(false);
textd.setClickable(false);
}
});
textb.setOnClickListener(new OnClickListener()
{
public void onClick(View v) {
texta.setClickable(false);
textc.setClickable(false);
textd.setClickable(false);
}
});
textc.setOnClickListener(new OnClickListener()
{
public void onClick(View v) {
texta.setClickable(false);
textb.setClickable(false);
textd.setClickable(false);
}
});
textd.setOnClickListener(new OnClickListener()
{
public void onClick(View v) {
texta.setClickable(false);
textb.setClickable(false);
textc.setClickable(false);
}
});
这是 ListView 的默认行为。只有一个可以点击:列表行或行内的项目。
例如:如果行项目是 textView(如您的情况),则列表行将是可点击的,但如果行项目是按钮,则列表行将不可点击。如果您将 TextView 设置为可点击,情况也是如此。
根据您的要求,更好的方法是使用 RadioGroup(而不是多个文本视图并禁用和启用它们)。您应该为列表项使用自定义布局,其中 TextView 用于问题,RadioGroup 用于选项。
布局可能是这样的:
请按照以下链接进行参考:对于RadioGroup的listView
我希望这个能帮上忙
感谢 Shrikant 和 adam 的帮助 抱歉,我很抱歉回复得太晚了。
或者像 Shrikant 那样在适配器类中使用它:
textViewa.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Do anything here.
}
});
textViewb.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
// Do anything here.
}
});
//and so on...
// or better to use ViewHolder holder; for these type of listviews;
View.OnClickListener clickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
// Do what you want to do.
// for my i have to call a method in my parent activity. so in constructor of adapter, I passed the activity and then typecasted it like
ParentActivity parent = (ParentActivity) activity;
parent.chosenAnswer(view.getId());
// then in chosenAnswer(int id) in parentActivity use a switch case for the same logic as in Adam's answer.
// OR
//you can write like this too..
switch (view.getId()) {
case R.id.textViewa:
break;
case R.id.textViewb:
break;
case R.id.textViewc:
break;
case R.id.textViewd:
break;
}
}
};