ListView
を含むカスタムがありますButton
。このボタンの機能は削除ボタンです。ユーザーがこのボタンをクリックすると、現在の行が削除されます。
- どうすればいいですか?
onClickListener
このボタンの設定方法を教えてください。- このボタンがオンになっている行IDを取得するにはどうすればよいですか?
前もって感謝します。
ListView
を含むカスタムがありますButton
。このボタンの機能は削除ボタンです。ユーザーがこのボタンをクリックすると、現在の行が削除されます。
onClickListener
このボタンの設定方法を教えてください。前もって感謝します。
カスタム アダプタークラスのgetView()
buttonDelete.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// Use position parameter of your getView() in this method it will current position of Clicked row button
// code for current Row deleted...
}
});
まず、このアイテムのクリックを処理するのは非常に簡単です。でリスナーを追加するだけですmyButton.setOnClickListener(mBuyButtonClickListener)
。このアクションは、通常getView(...)
、ListView
.
リスナーは、 を使用してボタンのアイテムの位置を知ることができますmyListView.getPositionForView(myButton)
。リスナーのこのサンプルを見てください:
private OnClickListener mBuyButtonClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
final int position = getListView().getPositionForView(v);
if (position != ListView.INVALID_POSITION) {
//DO THE STUFF YOU WANT TO DO WITH THE position
}
}
};
これが完了すると、アイテム自体のクリックやその他のタッチ イベントの伝播を処理する際に問題が発生するはずです。
したがって、内の複数のタッチ可能領域の使用について詳しく説明しているこの記事ListView
を読む必要があります。とても役に立ちます。
私はいたるところを見ましたが、回答が得られるまで、どの回答も役に立ちませんでした。
私がしたことは、HolderView を作成し、すべてのテキストビューと他のウィジェットを adpater の getView メソッドにラップすることでした。
このクラスを入れます:
static class ViewHolder
{
TextView text1;
TextView text2;
TextView text3;
}
また、現在は別になっているため、同じものを通常どおりデカールしました。
TextView text1;
TextView text2;
TextView text3;
getView でレイアウトを拡張した後、すべてのビューとウィジェットを宣言します。
holder = new ViewHolder();
holder.text1 = (TextView) vi.findViewById(R.id.textView2single);
holder.text2 = (TextView) vi.findViewById(R.id.textView3single);
holder.text3 = (TextView) vi.findViewById(R.id.textView4single);
onClick メソッド内で、次を使用しました。
View parentView = (View) v.getParent();
そして、この親ビューを使用してすべてのウィジェットを再度宣言しました:
text1 = (TextView) parentView.findViewById(R.id.textView2single);
text2 = (TextView) parentView.findViewById(R.id.textView3single);
text3 = (TextView) parentView.findViewById(R.id.textView4single);
これを行うと、onClick がリスト ビュー アイテムの親の位置を取得するように強制されるため、その親内のすべてのウィジェットを簡単に呼び出すことができ、好きなことを行うことができます。これが私が見つけた唯一の方法です。
アダプタ クラスの getView メソッド内でこれを使用します。
holder.button.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
}
});
カスタム リスト ビュー アダプターを作成し、BaseAdapter を拡張して OnClickListener を実装する
public class ListAdapter extends BaseAdapter implements OnClickListener {}
getView メソッドをオーバーライドする
@Override
public View getView(int
position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View row = convertView;
ViewHolder holder = null;
if (row == null) {
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.list_item, parent, false);
holder = new ViewHolder();
holder.b1= (Button) row.findViewById(R.id.b1);
b1.setOnClickListener(this);
else {
holder = (ViewHolder) row.getTag();
}
}
onclick メソッドをオーバーライドするようになりました
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.b1:
//button b1 click event
break;
}
}
public class ViewHolder {
Button b1;
}
onClickListener()
の でメソッドを使用するにButton
は、のMethodeのボタンにListView
適用する必要があります。onClickListener()
Adapter
getView
position
しかし問題は、 のパラメータから値を取得できないことですgetView
。
タッチしたボタンの を取得するには、 でメソッドをposition
呼び出す必要があります。getPositionForView()
ListView
理解を深めるための例で議論しましょう。
ListView
あなたが名前を持っていると考えてくださいExampleListview
Button
名前が付けられていて、その上でExampleButton
使用したいonClickListener()
。
Examplebutton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
final int position= ExampleListview..getPositionForView(v);
/*Where 'v' is actually the 'View' object Which you are clicking.*/
/*you can now right your code her & determine the your desired button by
using the position parameter */
}