Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – java.lang.StackOverflowError:堆栈大小为8MB,同时在ListView适配器中启用/禁用TextView#setTextIsSelectable大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个ListView活动.在每个列表项中显示TextView.使用这些方法切换所选位置的属性EditText#setTextIsSELEctable,EditText#setEllipsize& EditText#setSingleLine.点击第1项工作正常.但是在点击另一个项目时我得到的是StackOverFlowError.

下面是我的代码示例.如果我有任何错误,请告诉我.

import android.app.Activity;
import android.content.Context;
import android.os.bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.baseAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class SELEctableTextListActivity extends Activity {
    private static final String TAG = "HistoryActivity";

    private ListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceStatE) {
        super.onCreate(savedInstanceStatE);
        setContentView(R.layout.activity_main);//only ListView present in this layout
        listView = (ListView) findViewById(R.id.myList);

        String items[] = {"Some Information Some Information Some Information","Some Information Some Information Some Information","Some Information Some Information Some Information"};
        final MyAdapter myAdapter = new MyAdapter(this,items);
        listView.setAdapter(myAdapter);
        listView.setOnItemClickListener(new AdapterView.onItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent,View view,int position,long id) {
                Log.d(tag,"onItemClick: position=" + position);
                myAdapter.setSELEctedPosition(position);
                myAdapter.notifyDataSetChanged();
            }
        });
    }

    private static class MyAdapter extends BaseAdapter {
        private static final String TAG = "HistoryAdapter";
        private final LayoutInflater inflater;
        privatE int mSELEctedPosition = -1;
        private String[] mItems;

        public MyAdapter(Context context,String[] items) {
            mItems = items;
            inflater = LayoutInflater.from(context);
        }

        public void setSELEctedPosition(int mSELEctedPosition) {
            this.mSELEctedPosition = mSELEctedPosition;
        }

        @Override
        public View getView(final int position,View convertView,ViewGroup parent) {
            ViewHolder viewHolder;
            if (convertView == null) {
                convertView = inflater.inflate(R.layout.SELEctable_text_layout,null,falsE);
                viewHolder = new ViewHolder(convertView);
                convertView.setTag(viewHolder);
            } else {
                viewHolder = (ViewHolder) convertView.getTag();
            }
            String item = getItem(position);

            viewHolder.SELEctableTV.setText(item);


            if (position == mSELEctedPosition) {
                Log.d(tag,"getView() called with: " + "position = [" + position + "],SELEcted = " + truE);
                viewHolder.SELEctableTV.setTextIsSELEctable(true);
                viewHolder.SELEctableTV.setSingleLine(false);
                viewHolder.SELEctableTV.setEllipsize(null);
            } else {
                Log.d(tag,SELEcted = " + falsE);
                viewHolder.SELEctableTV.setTextIsSELEctable(false);
                viewHolder.SELEctableTV.setSingleLine(true);
                viewHolder.SELEctableTV.setEllipsize(TextUtils.TruncateAt.END);
            }
            return convertView;
        }


        @Override
        public String getItem(int position) {
            return mItems[position];
        }

        @Override
        public long getItemId(int position) {
            return 0;
        }

        @Override
        public int getCount() {
            return mItems.length;
        }

        private class ViewHolder {
            public final TextView SELEctableTV;

            ViewHolder(View convertView) {
                SELEctableTV = (TextView) convertView.findViewById(R.id.SELEctableTextView);
            }
        }
    }
}

布局文件
SELEctable_text_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://scheR_848_11845@as.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:focusable="false"
    android:focusableInTouchMode="false"
    android:orientation="vertical"
    android:padding="5dp">

    <TextView
        android:id="@+id/SELEctableTextView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:clickable="true"
        android:ellipsize="end"
        android:focusable="false"
        android:text="My app name"
        android:textAppearance="?android:textAppearanceMedium" />

</LinearLayout>

堆栈跟踪是

D/Error: ERR: stack=java.lang.StackOverflowError: stack size 8MB
at java.lang.Class.isinstance(Class.java:1484)
at android.text.SpAnnableStringInternal.getSpans(SpAnnableStringInternal.java:217)
at android.text.SpAnnedString.getSpans(SpAnnedString.java:25)
at android.text.SpAnnableStringInternal.<init>(SpAnnableStringInternal.java:40)
at android.text.SpAnnableString.<init>(SpAnnableString.java:30)
at android.widget.TextView.removeSuggestionSpans(TextView.java:4200)
at android.widget.TextView.setText(TextView.java:3926)
at android.widget.TextView.setText(TextView.java:3911)
at android.widget.TextView.getIterableTextFOraccessibility(TextView.java:9047)
at android.view.View.onInitializeAccessibilityEvenTinternal(View.java:5450)
at android.view.View.onInitializeAccessibilityEvent(View.java:5422)
at android.widget.TextView.onInitializeAccessibilityEvent(TextView.java:8402)
at android.view.View.sendAccessibilityEventUncheckedInternal(View.java:5293)
at android.view.View.sendAccessibilityEventUnchecked(View.java:5280)
at android.view.View.sendAccessibilityEvenTinternal(View.java:5257)
at android.view.View.sendAccessibilityEvent(View.java:5226)
at android.widget.TextView.sendAccessibilityEvent(TextView.java:8571)
at android.widget.TextView.onSELEctionChanged(TextView.java:7584)
at android.widget.TextView.spanChange(TextView.java:7784)
at android.widget.TextView$ChangeWatcher.onSpanAdded(TextView.java:9478)
at android.text.SpAnnableStringInternal.sendSpanAdded(SpAnnableStringInternal.java:314)
at android.text.SpAnnableStringInternal.setSpan(SpAnnableStringInternal.java:138)
at android.text.SpAnnableString.setSpan(SpAnnableString.java:46)
at android.text.SpAnnableStringInternal.<init>(SpAnnableStringInternal.java:52)
at android.text.SpAnnableString.<init>(SpAnnableString.java:30)
at android.widget.TextView.removeSuggestionSpans(TextView.java:4200)
at android.widget.TextView.setText(TextView.java:3926)
at android.widget.TextView.setText(TextView.java:3911)
at android.widget.TextView.getIterableTextFOraccessibility(TextView.java:9047)
at android.view.View.onInitializeAccessibilityEvenTinternal(View.java:5450)
at android.view.View.onInitializeAccessibilityEvent(View.java:5422)
at android.widget.TextView.onInitializeAccessibilityEvent(TextView.java:8402)
at android.view.View.sendAccessibilityEventUncheckedInternal(View.java:5293)
at android.view.View.sendAccessibilityEventUnchecked(View.java:5280)
at android.view.View.sendAccessibilityEvenTinternal(View.java:5257)
at android.view.View.sendAccessibilityEvent(View.java:5226)
at android.widget.TextView.sendAccessibilityEvent(TextView.java:8571)
at android.widget.TextView.onSELEctionChanged(TextView.java:7584)
at android.widget.TextView.spanChange(TextView.java:7784)
at android.widget.TextView$ChangeWatcher.onSpanAdded(TextView.java:9478)
at android.text.SpAnnableStringInternal.sendSpanAdded(SpAnnableStringInternal.java:314)
at android.text.SpAnnableStringInternal.setSpan(SpAnnableStringInternal.java:138)
at android.text.SpAnnableString.setSpan(SpAnnableString.java:46)
at android.text.SpAnnableStringInternal.<init>(SpAnnableStringInternal.java:52)
at android.text.SpAnnableString.<init>(SpAnnableString.java:30)
at android.widget.TextView.removeSuggestionSpans(TextView.java:4200)
at android.widget.TextView.setText(TextView.java:3926)
at android.widget.TextView.setText(TextView.java:3911)
at android.widget.TextView.getIterableTextFOraccessibility(TextView.java:9047)
at android.view.View.onInitializeAccessibilityEvenTinternal(View.java:5450)
at android.view.View.onInitializeAccessibilityEvent(View.java:5422)
at android.widget.TextView.onInitializeAccessibilityEvent(TextView.java:8402)
at android.view.View.sendAccessibilityEventUncheckedInternal(View.java:5293)
at android.view.View.sendAccessibilityEventUnchecked(View.java:5280)
at android.view.View.sendAccessibilityEvenTinternal(View.java:5257)
at android.view.View.sendAccessibilityEvent(View.java:5226)
at android.widget.TextView.sendAccessibilityEvent(TextView.java:8

09-13 00:48:45.483 8705-8705/club.apptu.edittextlocalhistory D/Error: ERR: @R_616_10586@L BYTES WRITTEN: 16156172
09-13 00:48:45.483 8705-8705/club.apptu.edittextlocalhistory E/JavaBinder: !!! Failed BINDER transaCTION !!!
09-13 00:48:45.484 8705-8705/club.apptu.edittextlocalhistory E/AndroidRuntime: Error reporTing crash android.os.transactionTooLargeException
at android.os.binderProxy.transactNative(Native Method)
at android.os.binderProxy.transact(Binder.java:496)
at android.app.ActivitymanagerProxy.handleApplicationCrash(ActivitymanagerNative.java:4144)
at com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException(RuntimeInit.java:89)
at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)
at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)

提前致谢.

编辑:

我在ListView#onItemClickListener中调用notifyDatasetChanged时遇到问题.

解决方法

最后我得到了解决问题的方法.我删除了MyAdapter中的ViewHolder模式

private static class MyAdapter extends BaseAdapter {
    private static final String TAG = "HistoryAdapter";
    private final LayoutInflater inflater;
    privatE int mSELEctedPosition = -1;
    private String[] mItems;

    public MyAdapter(Context context,String[] mItems) {
        this.mItems = mItems;
        inflater = LayoutInflater.from(context);
    }



    public void setSELEctedPosition(int mSELEctedPosition) {
        this.mSELEctedPosition = mSELEctedPosition;
    }

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

        convertView = inflater.inflate(R.layout.SELEctable_text_layout,falsE);
        TextView SELEctableTV = (TextView) convertView.findViewById(R.id.SELEctableTextView);

        SELEctableTV.setText(getItem(position));

        if (position == mSELEctedPosition) {
            Log.d(tag,SELEcted = " + truE);
            SELEctableTV.setTextIsSELEctable(true);
            SELEctableTV.setSingleLine(false);
            SELEctableTV.setEllipsize(null);
        } else {
            Log.d(tag,SELEcted = " + falsE);
            SELEctableTV.setTextIsSELEctable(false);
            SELEctableTV.setSingleLine(true);
            SELEctableTV.setEllipsize(TextUtils.TruncateAt.END);
        }

        return convertView;
    }


    @Override
    public String getItem(int position) {
        return mItems[position];
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public int getCount() {
        return mItems.length;
    }
}

但是在使用ViewHolder模式时仍然没有找到问题的原因.如果有人找到原因让我知道.

大佬总结

以上是大佬教程为你收集整理的android – java.lang.StackOverflowError:堆栈大小为8MB,同时在ListView适配器中启用/禁用TextView#setTextIsSelectable全部内容,希望文章能够帮你解决android – java.lang.StackOverflowError:堆栈大小为8MB,同时在ListView适配器中启用/禁用TextView#setTextIsSelectable所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。