0

イメージビュー、テキストビュー、および3つのボタン(挿入、更新、削除)を含むカスタムアダプターでリストビューを使用しています要件は、インテントフィルターが一致するまで、カスタムアダプターがBROADCASTレシーバー内で毎回呼び出されることです。 .

問題は、リストビュー ボタンの最後の行のみがクリック可能であることです..しかし、すべての行のすべてのボタンをクリック可能にする必要があります。

誰かが私にその問題をどのように進めることができるかについての提案やアイデアを教えてもらえますか.

public View getView(final int position, View view, ViewGroup parent) {
    // TODO Auto-generated method stub

            pos=position;

    if(view==null)
    {
        LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view=inflater.inflate(R.layout.device_name, parent, false);
    }

    TextView text_view=(TextView)view.findViewById(R.id.textview_deviceName);

    ImageView image_view=(ImageView)view.findViewById(R.id.imageView1);

    text_view.setText(strDeviceName[position]);
    if(strMajorDevice[position].equalsIgnoreCase("phone"))
    {
        image_view.setImageResource(int_image[0]);
    }
    else
    {
        image_view.setImageResource(int_image[1]);
    }
    btnAdd=(Button)view.findViewById(R.id.btn_add);
    btnUpdate=(Button)view.findViewById(R.id.btn_update);
    btnDelete=(Button)view.findViewById(R.id.btn_delete);

    btnAdd.setOnClickListener(this);
    btnUpdate.setOnClickListener(this);
    btnDelete.setOnClickListener(this);
    return view;
}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    if(v==btnAdd)
    {
        Toast.makeText(context, "ADD", Toast.LENGTH_LONG).show();
        Intent intent = new Intent(context,MaterDeviceFormActivity.class);
        intent.putExtra("button","add");
        intent.putExtra("device_address", strDviceAddess[pos]);
        context.startActivity(intent);

    }
    else if(v==btnUpdate)
    {
        Toast.makeText(context, "UPDATE", Toast.LENGTH_LONG).show();
        Intent intent = new Intent(context,MaterDeviceFormActivity.class);
        intent.putExtra("button","update");
        intent.putExtra("device_address", strDviceAddess[pos]);
        context.startActivity(intent);
    }
    else if(v==btnDelete)
    {
        Toast.makeText(context, "DELETE", Toast.LENGTH_LONG).show();
        Intent intent = new Intent(context,MaterDeviceFormActivity.class);
        intent.putExtra("button","delete");
        intent.putExtra("device_address", strDviceAddess[pos]);
        context.startActivity(intent);
    }
}
4

5 に答える 5

3
private Context context;

public ListViewAdapter(Context context, String[] dateValues,String[] creditAmountValues,String[] closingBalanceValues,String[] currentAmountValues) 
{
    super(context, R.layout.transactionlayout, dateValues);
    this.context = context;

}

 @Override
  public View getView(final int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View rowView = inflater.inflate(R.layout.transactionlayout, parent, false);


         ((Button)rowView.findViewById(R.id.transactions_historyButtonID)).setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Toast.makeText(context, ""+position, 4000).show();
        }
    });

    return rowView;
  }

インフレータを使用して行ビューを使用します。これは機能しています。何か疑問があれば教えてください。

于 2012-10-26T05:55:38.123 に答える
1

ビューの取得メソッドで各ビューのタグを設定しますsetTag()

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


        if (convertView == null) {                            
            LayoutInflater inflater = context.getLayoutInflater();
            convertView = inflater.inflate(.....);
        } 

        ur_view= (views) convertView.findViewById(R.id.....);
                ur_view.setTag(position);

        ur_view.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                //do something
            }
        }); 

それが動作します

于 2012-10-26T06:19:42.330 に答える
0

-インターフェースにすべてを登録していないと思います。ButtonsOnClickListener

于 2012-10-26T05:31:53.607 に答える
0

アダプター内でボタン リスナーを使用できますが、それを登録する唯一のアイテムは、最後に描画されたアイテム (つまり、リストからすぐに外れるアイテム) になります。ボタンリスナーに、クリックされた項目を伝える必要があります。私の場合、位置を渡して、それを使用して、リスト項目の操作に必要な関連情報をロードしました。

于 2015-12-02T00:51:58.340 に答える
0

これを試してみてください。問題が解決するかもしれません。

btnAdd.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        Integer index = (Integer) arg0.getTag();

        Toast.makeText(context, "ADD", Toast.LENGTH_LONG).show();
        Intent intent = new Intent(context,MaterDeviceFormActivity.class);
        intent.putExtra("button","add");
        intent.putExtra("device_address", strDviceAddess[index]);
        context.startActivity(intent);
    }
});

btnUpdate.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        Integer index = (Integer) arg0.getTag();

        Toast.makeText(context, "UPDATE", Toast.LENGTH_LONG).show();
        Intent intent = new Intent(context,MaterDeviceFormActivity.class);
        intent.putExtra("button","update");
        intent.putExtra("device_address", strDviceAddess[index]);
        context.startActivity(intent);
    }
});

btnDelete.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        Integer index = (Integer) arg0.getTag();

        Toast.makeText(context, "DELETE", Toast.LENGTH_LONG).show();
        Intent intent = new Intent(context,MaterDeviceFormActivity.class);
        intent.putExtra("button","delete");
        intent.putExtra("device_address", strDviceAddess[index]);
        context.startActivity(intent);
    }
});
于 2012-10-27T10:00:07.847 に答える