0

この質問はSOで数回回答された可能性がありますが、私が探しているものをカバーしていませんでした。

カスタムアダプタ付きのリストビューがあります。ImageViewリストビューには、テキストビューとその行に添付された削除があります。アイテムがクリックされたときにそのアイテムをデータベースからも削除するために、そのアイテムからテキストビューの値を抽出したいと思います。リストアイテムも更新したいのでlistview.setOnClickListener、そのために使用しています。そのため、同じものを削除に使用することはできませんでした。setTag()使用法と方法について読みましgetTag()たが、正確にそれを行う方法がわかりません。アダプター内のimageviewを削除するためのタグとして、textviewまたはむしろtexviewの文字列値を設定したいと思います。次に、私のアクティビティgetTag()の内部で使用します。delete.setOnClickListener誰かがこれを手伝ってくれませんか?

関連するアダプターコード:

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    View row = convertView;
    MyStringReaderHolder holder;


    if(row==null)
    {
        LayoutInflater inflater = ((Activity)context).getLayoutInflater();
        row = inflater.inflate(layoutResourceId, parent,false);

        holder= new MyStringReaderHolder();

        holder.workLogID = (TextView)row.findViewById(R.id.worklog_id);
        holder.delete = (ImageView) row.findViewById(R.id.delete_entry);

        row.setTag(holder);
    }
    else
    {
        holder=(MyStringReaderHolder) row.getTag();
    }        

    ViewWorkEntryBean mrb = data.elementAt(position);


    holder.workLogID.setText(mrb.workLogID); 
    // mrb.workLogID contains the desired string which I want to pass to delete as a tag      
    // How do I set the tag?     


    return row;
}

 static class MyStringReaderHolder
 {
String billable;
 TextView workLogID;
 ImageView delete;

 }

そしてこれはアクティビティ内のonClickListenerです:

ImageView deleteButton = (ImageView) findViewById(R.id.delete_entry);

        deleteButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
            String ID = null;
                            // how do I get the value of the tag into the string ID 


            }
        });
4

2 に答える 2

2

さて、私はいくつかの仮定を行うつもりです。どれが間違っているか教えてください。

  • R.id.delete_entry は行レイアウトの削除ボタンです
  • R.id.worklog_id は、行レイアウトのテキスト ビューです。

その場合は、getView コードを次のようにします。

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    View row = convertView;

    if(row == null)
    {
        LayoutInflater inflater = ((Activity)context).getLayoutInflater();
        row = inflater.inflate(layoutResourceId, parent,false);
    }

    final TextView label = (TextView)row.findViewById(R.id.worklog_id);
    final ImageView delete = (ImageView) row.findViewById(R.id.delete_entry);

    ViewWorkEntryBean mrb = data.elementAt(position);

    // set tag here
    delete.setTag(mrb.workLogID);
    label.setText(mrb.workLogID /* or whatever */);

    delete.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            // You can now get your tag value here
            String ID = delete.getTag();

        }
    });

    return row;
}

私は実際にこのコードを実行したわけではありません。

編集:

次に、開始した場所と非常によく似たコードを作成できます。

/** This is in your ListView class */
@Override
public View getView(int position, View convertView, ViewGroup parent) {

    View row = convertView;

    if(row == null)
    {
        LayoutInflater inflater = ((Activity)context).getLayoutInflater();
        row = inflater.inflate(layoutResourceId, parent,false);
    }

    final TextView label = (TextView)row.findViewById(R.id.worklog_id);
    final ImageView delete = (ImageView) row.findViewById(R.id.delete_entry);

    ViewWorkEntryBean mrb = data.elementAt(position);

    // set tag here
    delete.setTag(mrb.workLogID);
    label.setText(mrb.workLogID /* or whatever */);

    return row;
}

次に、アクティビティで:

/** This is in your Activity class */
ImageView delete = /* However you were getting the current row's delete button */;
delete.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {

        // You can now get your tag value here
        String ID = v.getTag();

    }
});
于 2012-08-02T15:18:40.273 に答える