すべての行にListView
を拡張することにより、カスタムLinearLayout
を実装しました。すべての行には、小さなサムネイル、テキスト、および_check box
_があります。 _list view
_は適切に展開されており、問題なくスクロールして移動できます。
しかし、ListView
はsetOnItemClickListener()
にまったく応答しないようです。そのため、内部のテキストのgetView()
にクリックリスナーを設定して回避策を見つける必要がありました。 adapter
を再利用しようとすると、明らかに問題を引き起こしているすべての行。誰かが解決策を持っていますか?
これを試して
ListViewの場合、
final ListView list = (ListView) findViewById(R.id.list);
list.setItemsCanFocus(false);
また、リストアイテム内のチェックボックスにフォーカス可能なfalseを設定していることを確認してください
Android:focusable="false"
Android:focusableInTouchMode="false"
古い答え:私が書いた 前の投稿はこちら
Android:focusable="false"
Android:clickable="false"
imageButtonがカスタムビューにある場合は役に立ちません。実行時にbutton.setFocusable(false);
を使用する必要があります(Javaソースコードから)
編集:さらに洗練されたソリューションがあります。リスト要素のルートレイアウトにAndroid:descendantFocusability="blocksDescendants"
を追加してみてください。これにより、ListItemのクリックが可能になり、個別にボタンまたはImageButtonのクリックを処理できます。
アイテムビューをCheckBoxに設定するListViewの場合
Android:focusable="false"
Android:clickable="false"
拡張アダプタクラスでViewHolderを作成しましたか?はいの場合は、setOnItemClickListener()でそのプレースホルダーのインスタンスを作成すると、次のように機能する可能性があります。
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
View rowView = v;
if (rowView == null) {
LayoutInflater inflater = this.getLayoutInflater();
// GET INFLATE OF YOUR LAYOUT.
rowView = inflater.inflate(R.layout.projectpeopledescrate, null);
// CUSTOM ViewHolder Class Created in Adapter.
// name,title,comment are my components on the same listview clicked item.
PPDViewHolder viewHolder = new PPDViewHolder();
viewHolder.name = (TextView) rowView.findViewById(R.id.ppeopledescrvname);
viewHolder.title = (TextView) rowView.findViewById(R.id.ppeopledescrvtime);
viewHolder.comment = (TextView) rowView.findViewById(R.id.ppeoplervcomment);
viewHolder.hiddenLayout = (RelativeLayout) rowView.findViewById(R.id.hiddenCommentPanel);
rowView.setTag(viewHolder);
}
// ANOTHER object instance to apply new changes.
PPDViewHolder holder = (PPDViewHolder) rowView.getTag();
// I've setted up visibility over the components. You can set your onClickListener over your buttons.
holder.comment.setVisibility(View.GONE);
holder.name.setVisibility(View.GONE);
holder.title.setVisibility(View.GONE);
holder.hiddenLayout.setVisibility(View.VISIBLE);
holder.hiddenLayout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.MATCH_PARENT));
holder.hiddenLayout.bringToFront();
}
願わくば、あなたは同じものが欲しいのです。幸運を!
これらのプロパティを設定します。
Android:focusable="false"
Android:focusableInTouchMode="false"
list_item.xmlファイル内のすべてのUI要素に対して。
これがアダプタセットで解決されない場合:
v.imageView.setFocusable(false);
v.imageView.setFocusableInTouchMode(false);
私はこのコードを持っています
this.mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
Log.v(TAG,"loul");
}
});
しかし、それは機能しませんでした
だから私はちょうどonItemSelectedListenerを下に置いて、それはOoで動作します:
this.mListView.setItemsCanFocus(false);
this.mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
Log.v(TAG,"loul");
}
});
//listener for nothing but it allow OnItemClickListener to work
this.mListView.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});