私は、それぞれがImageButtonとTextViewを含むLinearLayoutsを返すアダプターで満たされたグリッドビューを持っています。
アダプターでは、onClickおよびonLongClickイベントをImageButtonにバインドしています。
OnItemClickListenerをグリッドビューにバインドしようとしていますが、onItemclickedが起動されなかった理由がわかりません。
何もない私の6時間目です。
ところで; OnItemSelectListenerはグリッド上で完全に機能します。
コードの一部が誤ってonItemClickedを処理したが、まだキャッチできなかったかどうかを確認しています。
助けが必要です。
gridView = (GridView) layoutInflater.inflate(R.layout.gridview, null);
gridView.setOnItemClickListener(new ItemClickListener());
.
.
.
//inner handler class
class ItemClickListener implements AdapterView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(mainActivity.getApplicationContext(),view + " clicked at pos " +
i,Toast.LENGTH_SHORT).show();
}
}
グリッドでクリック可能なオブジェクトを使用しないでください。その場合AndroidはGridView
のクリックイベントを処理できません。
代わりに、何かを使用して同様のユーザーインターフェイスビューを表示します。次に、そのオブジェクトのクリックアクションを処理します。
しないでください:Button
にGridView
を入れて、クリック操作を実行します。
Do:ImageView
の代わりにImageButton
を置き、ImageView
のクリックイベントを処理します。
Button
またはImageButton
を使用する場合は、ウィジェットのXMLコードにこれらの属性を記述する必要があります。
Android:focusable="false"
Android:focusableInTouchMode="false"
私にとってはその作品。
ただし、GridViewでは、これらのウィジェットの使用を避けてください。これらの代わりに、他のウィジェットを使用できます(ImageViewなど)。
また、ListAdpterがtrueを返すことも確認してください
パブリックブールisEnabled(int _position)
クリックしたい位置に.
設定してみてください
Android:clickable="false"
Android:focusable="false"
やあ、ガイズはようやく解決策を得ました...
ここでは、GridView内のレイアウトに直接アクセスしているため、onItemClickListenerがアイテムへのアクセスを混乱させています。
したがって、解決策は、アダプター(つまり、通常はArrayAdapter)内にonClickListenerを適用することです。
だから私が言おうとしているのは:
public View getView(int position, View convertView, ViewGroup parent) {
//Here row is a view and we can set OnClickListener on this
final View row;
ViewHolder holder = null;
if (convertView == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
//Here we inflate the layout to view (linear in my case)
row = inflater.inflate(layoutResourceId, parent, false);
holder = new ViewHolder();
holder.imageTitle = (TextView) row.findViewById(R.id.text);
holder.image = (ImageView) row.findViewById(R.id.image);
row.setTag(holder);
} else {
row = convertView;
holder = (ViewHolder) row.getTag();
}
ImageItem item = data.get(position);
holder.imageTitle.setText(item.getTitle());
holder.image.setImageBitmap(item.getImage());
//Now get the id or whatever needed
row.setId(position);
// Now set the onClickListener
row.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(context, "Clicked" + row.getId() + "!!",
Toast.LENGTH_SHORT).show();
}
});
return row;
}
いくつかの理由により、私も同じ問題に直面しています。だから、ここに私のヒントがあります:
4台のデバイスでテストしたところ、このソリューションは期待どおりに動作しました。それがあなたの場合に役立つことを願っています。私が何か間違ったことをしたら私を訂正してください。
レイアウトコードXML:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="100dp"
Android:layout_height="100dp"
Android:background="#273238"
Android:clickable="true"
Android:focusable="true"
Android:focusableInTouchMode="true"
Android:padding="1dp">
<ImageView
Android:id="@+id/open_image_item_imageview"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:src="@drawable/loh"
Android:clickable="true"
Android:focusable="false"
Android:focusableInTouchMode="false"
Android:scaleType="centerCrop"/>
<TextView
Android:id="@+id/open_image_item_textview"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:clickable="true"
Android:focusable="false"
Android:focusableInTouchMode="false"
Android:layout_gravity="bottom"
Android:padding="4dp"
Android:textSize="10sp"
Android:ellipsize="start"
Android:background="#55000000"
Android:textColor="#FFFFFF"
Android:text="image name"/>
</FrameLayout>
アダプターコードJava:
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view = null;
if(convertView != null && position != 0)
view = convertView;
else{
view = LayoutInflater.from(getContext()).inflate(R.layout.open_image_item_layout, null, false);
view.setLayoutParams(new GridView.LayoutParams(GridView.AUTO_FIT, size));
}
TextView textView = (TextView)view.findViewById(R.id.open_image_item_textview);
ImageView imageView = (ImageView)view.findViewById(R.id.open_image_item_imageview);
...
View.OnClickListener onClickListener = getOnClickListener(files[position]);
view.setOnClickListener(onClickListener);
textView.setOnClickListener(onClickListener);
imageView.setOnClickListener(onClickListener);
return view;
}