6

配列アダプターでフラグメントとリスト ビューを使用しようとしていますが、配列アダプターの onClickListener からメソッドを呼び出すのに問題があります。

パターンを正しく理解すれば、フラグメントは自給自足できるはずなので、そこにビジネス ロジックを入れたいと考えています。しかし、アレイアダプターから呼び出すことはできません。メイン アクティビティに入れれば呼び出すことができますが、別のアクティビティでフラグメントを使用してパラダイムを壊すことはできませんか?

ビジネス ロジックが間違った場所にあるのでしょうか、それとも正しく呼び出していないのでしょうか?

これが私のArrayAdapterです。

public class RecipientsListAdapter extends ArrayAdapter<Recipient>{

    Context context;
    int layoutResourceId;   
    Recipient data[] = null;

    public RecipientsListAdapter(Context context, int layoutResourceId, Recipient[] data) {
        super(context, layoutResourceId, data);
        this.layoutResourceId = layoutResourceId;
        this.context = context;
        this.data = data;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        View row = convertView;
        RecipientHolder holder = null;

        final boolean isLastRow = (position == data.length-1);

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

            holder = new RecipientHolder();
            holder.imgIcon = (ImageView)row.findViewById(R.id.imgIcon);
            holder.txtTitle = (TextView)row.findViewById(R.id.txtTitle);

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

        final Recipient recipient = data[position];
        holder.txtTitle.setText(recipient.displayName);
        holder.imgIcon.setImageResource(recipient.icon);

        row.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                ((MainActivity)context).onChildItemSelected(position);
                if(isLastRow){
                //((RecipientsFragment).getContext()).launchContactPicker();


                    ((MainActivity)context)).launchContactPicker();


                }
                else{
                    Toast.makeText(getContext(), recipient.displayName, Toast.LENGTH_SHORT).show();
                }
            }
        });

        return row;
    }
4

2 に答える 2

2

Adapterクリック リスナーを呼び出すものであってはならず、getView()メソッドにクリック リスナーをアタッチするべきではありません。代わりに、 を使用し、フラグメントListFragmentで単純にオーバーライドする必要があります。次に、リスナー インターフェイスのコールバックを呼び出してonListItemClick()そのイベントを にディスパッチするか、フラグメント内で直接処理することができます。SDK 11 のリリースより前の Android バージョンをサポートする場合は、サポート ライブラリActivityを使用することもできます。

于 2013-07-25T18:09:04.147 に答える