0

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

只有第二个适配器被读取,第一个的 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
            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 中使用的布局?真不知道我在做什么。

4

2 回答 2

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));

posts一个List<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]);
}
于 2013-10-20T20:26:01.187 回答
0

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

listView1.setListAdapter(adapter2);
listView2.setListAdapter(adapter);
于 2013-10-20T20:22:25.760 回答