基本的に私はAndroidが初めてで、それについてあまり知りません。ListView
customを 5 つの customで使用しているクイズ プログラムを作成していTextViews
ます。1 つは質問用、もう 4 つはオプション用です。私の問題は、TextView
クリック可能なLisView
モードと選択モードを単一にしたいということです。つまり、1 つのテキストをクリックすると、他TextView
のすべてのテキストをクリックできなくなるはずです。私の問題はTextView
、子レイアウトの a をクリックするたびに、外側のレイアウトのみListView
が選択されることです。ここに私のリストビューのスクリーンショットがあります
5 に答える
次の 2 つの方法で実行できます。
1. onClickListener を次のように直接使用します。
textView.setOnClickListener(new View.OnClickListener(
public void onClick(View arg0) {
// Do anything here.
}
});
また
2.XML
ファイルの宣言で、次の<TextView />
ようにもう 1 つの属性を追加します。
android:onClick="onClickTextView"
Yout アクティビティで、次の関数を追加します。
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();
}
}
});
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;
}
}
};
リストビューのコンテンツを設定するために BaseAdapter を拡張するとします ->
TextView リスナーを開き、現在のホルダー位置のタグを設定し、onclick メソッドで操作を実行します。
これを試して :
1つのテキストビューを選択すると、他の3つはクリックできなくなります
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 の既定の動作です。クリックできるのは、リスト行または行内の項目のいずれか 1 つだけです。
例:行アイテムがtextView(あなたの場合のように)の場合、リスト行はクリック可能になりますが、行アイテムがボタンの場合、リスト行はクリック可能になりません。TextView をクリック可能にした場合も同様です。
あなたの要件では、(複数のテキストビューとそれらを無効にして有効にする代わりに) RadioGroup を使用する方が良い方法です。質問には TextView を、オプションには RadioGroup を使用して、リスト項目のカスタム レイアウトを使用する必要があります。
レイアウトは次のようになります。
参照用に次のリンクに従ってください: RadioGroup
のlistViewの場合
これが役立つことを願っています