基本上我是Android新手,对此并不了解。我正在制作一个测验计划,其中我使用自定义ListView
和5个自定义TextViews
,一个用于提问,另外4个用于选项。我的问题是我希望TextView
可点击以及LisView
作为选择模式作为单一。也就是说,如果我单击一个文本,则所有其他TextView
应该变为不可点击。我的问题是每当我点击子布局中的TextView
时,只有外部布局,即ListView
的项目被选中。
这是我的listview的截图
答案 0 :(得分:1)
您可以通过两种方式实现:
1。直接使用onClickListener,如下所示:
textView.setOnClickListener(new View.OnClickListener(
public void onClick(View arg0) {
// Do anything here.
}
});
OR
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();
}
}
});
答案 1 :(得分:0)
假设您扩展BaseAdapter以设置列表视图内容 - &gt;
打开当前持有人位置的TextView监听器和settag,并在onclick方法中执行操作。
答案 2 :(得分:0)
试试这个:
当您选择一个文本视图时,其他三个将无法点击
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);
}
});
答案 3 :(得分:0)
这是ListView的默认行为。只有一个可以点击:列表行或行内的项目。
例如:如果行项是textView(如您的情况),则列表行将是可单击的,但如果行项是按钮,则列表行将不可单击。如果将TextView设置为可单击,则情况相同。
根据您的要求,更好的方法是使用RadioGroup(而不是多个文本视图并禁用和启用它们)。 您应该为列表项使用自定义布局,其中包含TextView for question和RadioGroup for options。
布局可能是这样的:
请点击以下链接以供参考:
listView
为RadioGroup
我希望这会有所帮助
答案 4 :(得分:0)
感谢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;
}
}
};