在列表中的运行时添加行内容

时间:2012-10-03 11:02:09

标签: android listview android-listview

我正在创建一个列表视图,其中每行左边有两个部分是图像视图,右边部分包含一些文本字段。但是字段应该动态加载..意味着从0到9的值将动态生成。我很困惑如何使用正确的部分。我想在java编码中创建它..而不是在xml ..我创建我的xml像这样..`

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_marginBottom="2dp"
    android:background="@android:color/white"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/image"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="2dp"
        android:layout_weight=".88"
        android:background="#D8D8D8"
        android:clickable="true"
        android:gravity="center"
        android:text="image"
        android:textColor="@android:color/black" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight=".15"
        android:orientation="vertical" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" />
         </LinearLayout>

</LinearLayout>

`enter image description here

我的适配器类就像这样::

   public class SimpleAdapter extends ArrayAdapter<Simple> {
        TextView mImage;
        LinearLayout layout_VER;
        LinearLayout layout_hor;
        private ArrayList<Simple> dd;
        Activity context = null;
        Intent myIntent;

        public SimpleAdapter(Activity context, int textViewResourceId, ArrayList<Simple> objects) {
            super(context, textViewResourceId, objects);
            this.dd = objects;
            this.context = context;
        }

        @Override
        public Simple getItem(int position) {
            // TODO Auto-generated method stub
            return dd.get(position);
        }

        @Override
        public int getCount() {

            return dd.size();
        }

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

            if (view == null) {
                LayoutInflater inflater = context.getLayoutInflater();
                view = inflater.inflate(R.layout.row, null);
            }
            view.setTag(pos);
            mImage = (ImageView) view.findViewById(R.id.image);
            if (dd != null) {
                Simple simple = dd.get(position);

            }

            layout_VER=(LinearLayout)view.findViewById(R.id.dyn_main);
            layout_VER.setTag(pos);
            showDEtails(view, layout_VER, 10);
            return view;
        }

        private void showDEtails(View view, LinearLayout layout_VER2, int Obj ) {
            View myView=view;
            LinearLayout ver_layout=layout_VER2;
            Log.i("showAppointments0000000000","vr_layout:::"+ver_layout.getTag());
            LinearLayout hr_layout1 = (LinearLayout)myView.findViewById(R.id.dyn_new);
            hr_layout1.setTag(ver_layout.getTag()+","+0);
            LinearLayout hr_layout2 =null;
            for (int i = 0; i < Obj i++) {
                if (i > 4) {
                    if (Obj  % 5 == 0) {
                        int mp=Obj  % 5;
                        hr_layout2 = new LinearLayout(context);
                        hr_layout2.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));
                        hr_layout2.setOrientation(LinearLayout.HORIZONTAL);
                        hr_layout2.setTag(ver_layout.getTag()+","+mp);
                    }      
                    TextView text = new TextView(context);
                    text.setTextSize(12);
                    text.setGravity(Gravity.LEFT);
                    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                            LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);
                    layoutParams.setMargins(2, 2, 2, 2);
                    text.setLayoutParams(layoutParams);
                    text.setPadding(3, 3, 3, 3);
                    text.setClickable(true);
                    hr_layout2.addView(text);               
                }else{
                    TextView text = new TextView(context);
                    text.setText("Value of j is : " + i);
                    text.setTextSize(12);
                    text.setGravity(Gravity.LEFT);
                    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                            LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);
                    layoutParams.setMargins(2, 2, 2, 2);
                    text.setLayoutParams(layoutParams);
                    hr_layout1.addView(text);
                    text.setClickable(true);
                    text.setPadding(3, 3, 3, 3);
                }
            }
        }

我的o / p就像这个enter image description here

问题是什么。

2 个答案:

答案 0 :(得分:0)

通过java语言代码动态创建布局。

请检查链接。它可以帮助您用实际的视图创建布局。

Link

Link

感谢。 祝你好运。

答案 1 :(得分:0)

如果您的右侧部分具有静态布局,并且只有字段中的文本会更改,则创建一个具有该布局的单独xml,然后使用ListView适配器的getView()中的值进行充气和填充。像这样:

public View getView(int position, View v, ViewGroup parent) {
        LayoutInflater layoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = layoutInflater.inflate(mTextViewResourceId, null);
        TextView text = (TextView) v.findViewById(R.id.field1);
        text.setText(mItems.get(position).field1text);
        return v;
}