2

私はTextView

<TextView
    android:background="@drawable/myshape"
    android:padding="5dp"
    ... />

背景として次の形状が設定されています。

<shape>
    <corners android:radius="4dp" />
    <solid android:color="#FFFAD6" />
</shape>

TextView内に表示されますListView。問題は、スクロール時にパディングが失われることです。リスト ビューが最初にレンダリングされると、問題なく表示されます。

ここに画像の説明を入力

リストを前後にスクロールすると、パディングが失われます。

ここに画像の説明を入力

私は何が欠けていますか?

編集コードは次のとおりです。

public class MyArrayAdapter extends ArrayAdapter<MyBean> {

    private Context context;
    private List<MyBean> myBeans;

    public MyArrayAdapter(Context context, int resource, int textViewResourceId, List<MyBean> myBeans) {
        super(context, resource, textViewResourceId, myBeans);
        this.context = context;
        this.myBeans = myBeans;
    }

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

        if (row == null) {
            LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            row = inflater.inflate(R.layout.my_activity, parent, false);
        }

        MyBean bean = myBeans.get(position);
        setData(row, bean);
        return row;
    }

    private void setData(View layout, MyBean bean) {
        TextView dateHeader = (TextView) layout.findViewById(R.id.dateHeader);
        dateHeader.setText(bean.getDate());

        TextView textView1 = (TextView) layout.findViewById(R.id.box);
        textView1.setText("textView 1");

        TextView box = (TextView) layout.findViewById(R.id.box);
        box.setText(Html.fromHtml("<b>Foo</b><br><small>Bar</small>"));
        // etc..
    }
}


public class MyActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_activity);

        ListView listView = new ListView(this);
        setContentView(listView);
        ArrayAdapter<MyBean> arrayAdapter = new MyBeanArrayAdapter(
                this, R.layout.my_activity, R.id.dateHeader, getBeans());

        listView.setAdapter(arrayAdapter);
    }

}

更新遊んだ後、テキストが2行に分割されているためにこれが発生していることがわかりました( または を使用<br>\n

box.setText(Html.fromHtml("<b>Foo</b><br><small>Bar</small>"));
box.setText("Foo \n Bar");

<br>またはを削除しても\nTextViewボックスはそのサイズを維持します。

ただし、これに対する解決策はまだありません。提案を受け付けます。

4

1 に答える 1

1

私も同様の行動に直面しました。ビューがリスト アダプター内でリサイクルされると、レイアウト パラメーターが失われるようです。アダプタのgetView()メソッド内でレイアウト パラメータを設定することになりました。getView() で setPadding (int left, int top, int right, int bottom) を試して、問題が解決するかどうかを確認してください。

于 2012-12-10T20:30:46.903 に答える