0

非アクティビティクラスで動的ビューを構築しています。これは、メインビューのセクションにデータを入力するために、アクティビティクラスによって呼び出されます。私の問題はこの「サブビュー」内で発生します

リストビューに項目を追加するonclicklistenerがありますが、アダプタオブジェクトをfinalとして宣言する必要があるため、アダプタでnotifydatasetchangedをonclicklistenerから呼び出すことができません。これは機能しません。

私は何が間違っているのですか?

これが私のコードです:( newComment(o)の直後にdatasetchangedに通知したい)

public  RelativeLayout getCommentsView(final Object o) {
    RelativeLayout view = new RelativeLayout(mContext);
        ImageView background = new ImageView(mContext);
        background.setImageResource(R.drawable.background);
        background.setScaleType(ScaleType.FIT_START);
        LinearLayout comments = new LinearLayout(mContext);
            comments.setOrientation(LinearLayout.VERTICAL);
            comments.setPadding(8,20,8,0);
            LinearLayout titleBar = new LinearLayout(mContext);
                ImageView addButton = new ImageView(mContext);
                addButton.setImageResource(R.drawable.ic_menu_add);
                titleBar.setClickable(true);
                titleBar.setOnClickListener( new OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        newComment(o);
                    }
                });
                TextView title = new TextView(mContext);
                title.setText(mContext.getString(R.string.comments));
                title.setPadding(10,5,0,0);
                title.setTextSize(18);
                title.setTextColor(Color.WHITE);
                if (mContext instanceof LocationActivity) {
                    title.setTextColor(Color.parseColor("#33b5e5"));
                } else if (mContext instanceof TrailActivity) {
                    title.setTextColor(Color.parseColor("#AA66CC"));
                }
                LinearLayout.LayoutParams layout = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);
                titleBar.addView(title,layout);
                layout = new LinearLayout.LayoutParams(48,48);
                titleBar.addView(addButton,layout);
            TextView divider = new TextView(mContext);
            divider.setBackgroundResource(R.drawable.divider);
            ListView commentsList = new ListView(mContext);
            commentsList.setBackgroundColor(Color.TRANSPARENT);
            commentsList.setCacheColorHint(Color.TRANSPARENT);
            commentsList.addHeaderView(titleBar);
            commentsList.addFooterView(divider);
            CommentsListAdapter commentsListAdapter = new CommentsListAdapter(mContext,R.layout.comments_list_item,getCommentsFor(o));
            commentsList.setAdapter(commentsListAdapter);
            comments.addView(commentsList);
        view.addView(background);
        view.addView(comments);
    return view;
}
4

2 に答える 2

1

非アクティビティクラスコンストラクターがアダプター参照を受け取り、それを非アクティビティクラスのインスタンス変数に保存するようにします。

そうすれば、最終的な宣言をしなくても、クラス内のどこでも使用できます。

于 2012-04-28T05:50:07.753 に答える
0

次のコードを試してください。

myListView.invalidateViews();
于 2012-04-28T06:22:44.653 に答える