4

リストビューに設定されたアイテムの静的配列があり、別のアクティビティから変更する可能性があります (さらにいくつかのアイテムを追加します)。したがって、最初のアクティビティに戻るときは、リストビューのコンテンツを新しいアイテムで更新する必要があります。

私はそれを次のように行います:メソッドで、もちろんそうする必要があるかどうかを確認しますadapter.notifyDataSetChanged()onStart()

問題は、リストを少しスクロールした場合にのみ、リストビューが変更されたことがわかります。

問題は何でしょうか?

LE:解決策は、Activity を変更する前にlistview.invalidateViews() を設定し、最初のアクティビティに戻るときに、アダプターにその目的を終了することを通知することでした。

LE @渦:

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

    if (convertView == null) {
        convertView = inflater.inflate(row, parent, false);
    }


    TextView tvAuthor = (TextView) ViewHolder.get(convertView, R.id.authorText);
    TextView tvDate = (TextView) ViewHolder.get(convertView,R.id.dateText);
    TextView tvCategory = (TextView) ViewHolder.get(convertView,R.id.categoryText);
    TextView tvTitle = (TextView) ViewHolder.get(convertView,R.id.titleText);
    TextView tvContent = (TextView) ViewHolder.get(convertView,R.id.contentText);
    TextView tvNoComment = (TextView) ViewHolder.get(convertView,R.id.noComments);
   WebView sv_banner = (WebView) ViewHolder.get(convertView,R.id.wv_imageBanner);

    objBean = items.get(position);


    sv_banner.getSettings().setJavaScriptEnabled(true);
    sv_banner.getSettings()
            .setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
    sv_banner.getSettings().setLightTouchEnabled(true);
    sv_banner.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
    sv_banner.getSettings().setPluginState(WebSettings.PluginState.ON);


    if ((position + 1) % 3 == 0) {
        if (sv_banner != null && null != objBean.getBanner_img_url() && objBean.getBanner_img_url().trim()
                .length() > 0) {
            sv_banner.setVisibility(View.VISIBLE);
            sv_banner.loadUrl(objBean.getBanner_img_url().toString());
            sv_banner.setFocusable(false);
        }
    } else {
        sv_banner.setVisibility(View.GONE);
    }


    sv_banner.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_UP) {
                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(objBean.getBanner_url().toString()));
                activity.startActivity(intent);
                return true;
            }
            return false;
        }
    });

    if (tvAuthor != null && null != objBean.getAuthor()
            && objBean.getAuthor().trim().length() > 0) {
        tvAuthor.setText(Html.fromHtml(objBean.getAuthor()));
    }

    if (tvNoComment != null && null != objBean.getNoComments()
            && objBean.getNoComments().trim().length() > 0) {
        int nrComent = Integer.valueOf(objBean.getNoComments());

        if (nrComent == 0) {
            tvNoComment.setText("");
        } else {
            tvNoComment.setText(Html.fromHtml(objBean.getNoComments()) + "  comments");
        }
    }


    if (tvDate != null && 0 != objBean.getPost_date()
            && objBean.getPost_date() > 0) {
        tvDate.setText(Html.fromHtml(String.valueOf(dateFormat.format(objBean.getPost_date()))));
    }

    if (tvCategory != null && null != objBean.getCategory()
            && objBean.getCategory().trim().length() > 0) {
        tvCategory.setText(Html.fromHtml(objBean.getCategory()).toString());
    }

    if (tvTitle != null && null != objBean.getTitle()
            && objBean.getTitle().trim().length() > 0) {
        tvTitle.setText(Html.fromHtml(objBean.getTitle()).toString());
    }

    if (tvContent != null && null != objBean.getContent()
            && objBean.getContent().trim().length() > 0) {
        String miniText = html2text(objBean.getContent());
        Log.i("Content", "MiniText = " + miniText);
        if (miniText.length() < 150) {
            String finalMiniText = miniText.substring(0, miniText.length());
            tvContent.setText(finalMiniText + "...");
        } else {
            String finalMiniText = miniText.substring(0, 150);
            tvContent.setText(finalMiniText + "...");
        }
    }


    if (position == 0) {

        RelativeLayout child = (RelativeLayout) convertView.findViewById(R.id.layoutNewsForex);
        child.setBackgroundResource(R.drawable.list_shape_corners);
        RelativeLayout.LayoutParams head_params = (RelativeLayout.LayoutParams) child.getLayoutParams();
        head_params.setMargins(18, 18, 18, 0); //substitute parameters for left, top, right, bottom
        child.setLayoutParams(head_params);

    } else {
        RelativeLayout child = (RelativeLayout) convertView.findViewById(R.id.layoutNewsForex);
        child.setBackgroundColor(Color.parseColor("#ebebeb"));
        RelativeLayout.LayoutParams head_params = (RelativeLayout.LayoutParams) child.getLayoutParams();
        head_params.setMargins(18, 0, 18, 0); //substitute parameters for left, top, right, bottom
        child.setLayoutParams(head_params);
    }


    return convertView;

}

PS。このアダプターは ArrayAdapter を拡張しています。

4

1 に答える 1

3

解決策は、Activity を変更する前に listview.invalidateViews() を設定し、最初のアクティビティに戻るときに、アダプタにその目的を終了することを通知することでした。

于 2013-05-13T07:50:07.573 に答える