【问题标题】:How can I add my Dynamic Layout to ListView?如何将我的动态布局添加到 ListView?
【发布时间】:2012-07-18 07:15:13
【问题描述】:

我创建了一个动态线性布局,我想将这些布局添加到 ListView。代码如下:

动态布局代码:

import android.content.Context;
import android.widget.LinearLayout;
import android.widget.TextView;

public class DynamicContentLayout extends LinearLayout{
    private Context context;
    private int linearLayoutMargin;

    public DynamicContentLayout(Context context) {
        super(context);
        this.context = context;
        linearLayoutMargin = (int) context.getResources().getDimension(R.dimen.xlarge_margin_padding_fixed);
        initViews();
    }

    private void initViews() {
        LinearLayout.LayoutParams layout_lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        layout_lp.setMargins(linearLayoutMargin, linearLayoutMargin, linearLayoutMargin, linearLayoutMargin);
        this.setLayoutParams(layout_lp);
        this.setOrientation(LinearLayout.VERTICAL);
        this.addView(headerTitle("My Text"));

    }

    private TextView headerTitle(String title) {
        TextView txtView = new TextView(context);
        txtView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
        txtView.setPadding(6, 6, 6, 6);
        txtView.setText(title);
        txtView.setBackgroundColor(context.getResources().getColor(R.color.red));
        txtView.setTextColor(context.getResources().getColor(R.color.white));
        return txtView;
    }

}

ListAdpaterCode:

import java.util.ArrayList;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;

public class ListViewAdapter extends ArrayAdapter<DynamicContentLayout> {

    private Context context;
    private ArrayList<DynamicContentLayout> layoutList = null;

    public ListViewAdapter(Context context, int textViewResourceId, ArrayList<DynamicContentLayout> layoutList) {
        super(context, textViewResourceId, layoutList);
        this.context = context;
        this.layoutList = layoutList;
    }

    @Override
    public int getCount() {
        return layoutList.size();
    }

    @Override
    public DynamicContentLayout getItem(int position){
        return layoutList.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        DynamicContentLayout entry = (DynamicContentLayout) layoutList.get(position);
        convertView = (View) entry;
        return convertView;
    }
}

最后是我设置适配器的 MainActivity 中的代码:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ListView listView = (ListView) findViewById(R.id.listView);
    ArrayList<DynamicContentLayout> contents = new ArrayList<DynamicContentLayout>();
    contents.add(new DynamicContentLayout(getApplicationContext()));
    contents.add(new DynamicContentLayout(getApplicationContext()));
    contents.add(new DynamicContentLayout(getApplicationContext()));
    ArrayAdapter<DynamicContentLayout> arrayAdapter = new ArrayAdapter<DynamicContentLayout>(getApplicationContext(), android.R.layout.simple_list_item_1, contents);
    listView.setAdapter(arrayAdapter);
    arrayAdapter.notifyDataSetChanged();
}

Xml 布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
>

    <ListView
        android:id="@+id/listView"
        android:layout_width="fill_parent"
        android:background="@color/blue"
        android:layout_height="fill_parent"
        android:alwaysDrawnWithCache="true"
        android:clickable="true"
        android:layout_alignParentTop="true"
        android:divider="@color/grey"
        android:drawingCacheQuality="auto"
        android:fastScrollEnabled="true"
        android:paddingLeft="15dp"
        android:paddingRight="15dp"
        android:scrollbars="none" >
    </ListView>

</RelativeLayout>

现在,当我运行时,没有报告错误。但我看不到 listItems 布局。我只能看到班级的名称。例如:“com.myexample.dynamicontentoverview.DynamicContentLayout@405193d0”作为 listItem 的行而不是 Layout。

我还要补充一点。我不能使用 XMl 布局,因为我在 DynamicLinearLayout 中的视图可以增加/减少某些行。

请提出一些建议。

谢谢。

【问题讨论】:

    标签: android listview layout dynamic


    【解决方案1】:

    您完全错误地理解了自定义列表视图的概念。

    您应该在 xml 布局中定义您的自定义布局。 您的阵列适配器的类型不应该是布局。它应该是您尝试填充 listView 的对象类型。

    查看此tutorial 以更好地了解您应该执行的步骤。

    【讨论】:

      【解决方案2】:

      您使用ArrayAdapter 作为ListView 的适配器,而不是您自己的ListViewAdapter 扩展ArrayAdapter&lt; DynamicContentLayout&gt;

      您现在看到的是您的对象 toString 表示,因为这就是 ArrayAdapter 所做的。

      【讨论】:

      • 是的,我把它改成了 ListViewAdapter arrayAdapter = new ListViewAdapter(getApplicationContext(), android.R.layout.simple_list_item_2, contents); listView.setAdapter(arrayAdapter); arrayAdapter.notifyDataSetChanged();现在我遇到了错误。
      • 好的。等等……它在我的 LogCat 中……让我把它给你。
      • LogCat 数据很大。有什么方法可以分享一个txtFile吗?
      • 查看 link 获取 logcat 数据。
      • 你需要使用父母LayourParams,所以你应该使用RelativeLayout Params,而不是LinearLayout
      猜你喜欢
      • 1970-01-01
      • 2023-03-14
      • 2011-07-08
      • 1970-01-01
      • 2014-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多