如何使用自定义适配器

时间:2013-10-20 20:06:26

标签: android android-arrayadapter listadapter

我知道这是一个转贴,但我现在一直试图让它工作多年(小时),我真的无法理解现有的答案。 我想知道的是:如何编辑此代码以使其有效?我正在尝试从两个不同的数组中填充两个文本视图。

只有第二个适配器被读取,第一个适配器的textview保持空白。

任何帮助都将不胜感激。

        public void run () {                

            if (t.getState() == Thread.State.TERMINATED) {
                adapter2 = new ArrayAdapter<String>(getApplicationContext(), R.layout.listlook, R.id.txtl2, names);
                setListAdapter(adapter2);
                adapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.listlook, R.id.txtl1, comments);
                setListAdapter(adapter);
                return;
            } else {
                h.postDelayed(this, 1000);  
            }

        }}
    , 1000);    
}

提前致谢。

Usercomments.xml中的Listview

            <ListView
            android:id="@+android:id/list"
            android:layout_width="match_parent"
            android:layout_height="150dp" >
            </ListView>

listlook.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

    <TextView
    android:id="@+id/txtl1"
    android:paddingLeft="2dp"
    android:textSize="20sp"
    android:textStyle="bold"
    android:textColor="#0000FF"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="TextView" />

    <TextView
    android:id="@+id/txtl2"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/txtl1"
    android:gravity="bottom|right"
    android:paddingLeft="5dp"
    android:text="TextView"
    android:textColor="#5C002E"
    android:textSize="15sp" />

    </RelativeLayout>

listlook只是我在listview中使用的布局?真的不知道我在做什么。

2 个答案:

答案 0 :(得分:4)

您告诉列表视图您要使用adapter2,然后告诉它您要使用adapter - 它一次只能读取一个适配器的数据< /强>

如果要显示两个列表中的数据,可以执行以下操作。

首先,将两个列表组合成一个类,并构建一个List<Post>,而不是有两个数组:

public class Post {
    String mName, mComment;
    public Post(String name, String comment) {
        mName = name;
        mComment = comment;
    }

    public String getName() {
        return mName;
    }

    public String getComment() {
        return mComment;
    }

}

然后,编写一个知道如何显示Post项目的适配器:

public class PostAdapter extends BaseAdapter {

    private Activity mActivity;
    private List<Post> mPosts;

    public TweetstreamAdapter(Activity activity, List<Post> posts) {
        mActivity = activity;
        mPosts = posts;
    }

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

    @Override
    public Post getItem(int position) {
        return mPosts.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Post post = getItem(position);
        if (convertView == null) {
            convertView = mActivity.getLayoutInflater().inflate(R.layout.listlook, parent, false);
        }
        ((TextView)convertView.findViewById(R.id.txtl1)).setText(post.getName());
        ((TextView)convertView.findViewById(R.id.txtl2)).setText(post.getComment());
        return convertView;
    }

}

然后在您的活动中,您将适配器设置为:

setListAdapter(new PostAdapter(this, posts));

其中postsList<Post>个帖子。

注意您需要确保TextView布局中的listlook个条目的ID与适配器正在搜索的ID相匹配。更新代码以相应地匹配您的ID。已更新以匹配您的ID。如果您正确构建Post个对象列表,这应该只是插入。

更新2:您可以构建一个这样的列表,假设两个数组(名称/注释)长度相同

List<Post> posts = new ArrayList<Post>();
for(int i = 0; i < names.length; i++) {
    posts.add(new Post(names[i], comments[i]);
}

答案 1 :(得分:0)

您有两行setListAdapter()。第二次覆盖第一次。如果您有两个ListViews,请执行以下操作:

listView1.setListAdapter(adapter2);
listView2.setListAdapter(adapter);