onClick
の項目で使用するボタンのイベントを追加したいListview
。onClick
リストアイテムのボタンにイベントを与えるにはどうすればよいですか。
10 に答える
アダプター クラス内
public View getView(final int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = getLayoutInflater();
View row = inflater.inflate(R.layout.vehicals_details_row, parent, false);
Button deleteImageView = (Button) row.findViewById(R.id.DeleteImageView);
deleteImageView.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//...
}
});
}
しかし、listView の行がクリックできないという問題が発生する可能性があります。解決:
- ListView をフォーカス可能にする
android:focusable="true"
- フォーカスできないボタン
android:focusable="false"
onClick
カスタム アダプターのgetView
メソッドでイベントを設定できます。
リンクhttp://androidforbeginners.blogspot.it/2010/03/clicking-buttons-in-listview-row.htmlを確認してください。
これを試して、
public View getView(final int position, View convertView,ViewGroup parent)
{
if(convertView == null)
{
LayoutInflater inflater = getLayoutInflater();
convertView = (LinearLayout)inflater.inflate(R.layout.YOUR_LAYOUT, null);
}
Button Button1= (Button) convertView .findViewById(R.id.BUTTON1_ID);
Button1.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// Your code that you want to execute on this button click
}
});
return convertView ;
}
それはあなたを助けるかもしれません....
getView メソッド内のカスタム アダプター:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Do things Here
}
});
これは多くの投稿で議論されていますが、それでも解決策を見つけることができませんでした:
android:focusable="false"
android:focusableInTouchMode="false"
android:focusableInTouchMode="false"
以下のソリューションは、ボタン、ImageButtons、ImageView、Textview のいずれかの UI コンポーネントで機能します。LinearLayout、RelativeLayout はリストビュー セル内をクリックし、onItemClick にも応答します。
アダプタ クラス - getview():
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
view = lInflater.inflate(R.layout.my_ref_row, parent, false);
}
final Organization currentOrg = organizationlist.get(position).getOrganization();
TextView name = (TextView) view.findViewById(R.id.name);
Button btn = (Button) view.findViewById(R.id.btn_check);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
context.doSelection(currentOrg);
}
});
if(currentOrg.isSelected()){
btn.setBackgroundResource(R.drawable.sub_search_tick);
}else{
btn.setBackgroundResource(R.drawable.sub_search_tick_box);
}
}
これで、ボタンクリックオブジェクトをアクティビティに取得できます。(特に、ボタンを選択状態と非選択状態のチェックボックスとして機能させたい場合):
public void doSelection(Organization currentOrg) {
Log.e("Btn clicked ", currentOrg.getOrgName());
if (currentOrg.isSelected() == false) {
currentOrg.setSelected(true);
} else {
currentOrg.setSelected(false);
}
adapter.notifyDataSetChanged();
}
ListView のカスタム アダプターを定義したと仮定します。
この場合onClickListener
、カスタム アダプターのgetView()
メソッド内でボタンを割り当てることができます。
getviewメソッドでは、リスナーをビューのチェックの外に置きます..これに従うようにしてください..私の場合はうまくいきました..リストビューの各行のedittextの値を増減するにはどうすればよいですか?
私は見つける
final Button yourButton = (Button)view.findViewById(R.id.your_button);
yourButton.setFocusable(false);
yourButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
...///);
問題を解決できます。ボタンをクリックしたときに何らかのデータを取得したい場合は、タグを使用すると便利です。ここでは、ボタンは内部クラス内で使用されるため、final として宣言されています。