2013-10-20 168 views
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使用的布局?真的不知道我在做什么。

+0

的适配器连接到一个ListView。我猜你的活动只有一个ListView,因为每个ListView只能有一个适配器,所以你用第二个适配器替换你的第一个适配器。看起来只有第二个适配器被使用。如果你想同时显示,你可能想要添加另一个ListView,或将两个列表放入一个,然后重试。 –

+0

嘿丹尼尔,我使用了两个textview的自定义列表视图,但我有点自学成能,并不能淡化关于这种类型的事物的现有代码的一个字。感谢您的回复:) – dkgeld

+0

我认为问题是,你不明白在适配器listView <->背后的想法。 ListView没有TesxViews的特定计数。你能显示listLook布局吗? –

回答

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>的帖子。

注意你需要确保你有你的listlook布局TextView条目具有匹配适配器搜索指定的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]); 
} 
+0

我使用来自PHPMySQL数据库的数据填充列表。非常丰富的答案,但不是很熟悉为一个Activity使用不同的类,我是否按原样创建类?我将在哪里放置方法来调用JSON对象? – dkgeld

+0

您可以使用我上面添加的代码,使用您现有的字符串数组创建“Post”对象列表。检索数据是一个完全不同的问题。如果你不确定该怎么做,我建议你做更多的研究,如果你仍然无法弄清楚,那就开个新问题。 –

+1

如果您正在从SQL数据库读取数据,则可能需要查看CustomCursorAdapter –

0

你有两条线setListAdapter()。第二个覆盖第一个。如果你有两个ListViews然后做到这一点:

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