Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用自定义适配器_Android_Android Arrayadapter_Listadapter - Fatal编程技术网

Android 如何使用自定义适配器

Android 如何使用自定义适配器,android,android-arrayadapter,listadapter,Android,Android Arrayadapter,Listadapter,我知道这是一个转载,但我一直试图让这个工作了好长时间(小时)现在,我真的无法理解现有的答案。 我想知道的是:如何编辑此代码以使其正常工作?我试图从两个不同的数组中填充这两个文本视图 只有第二个适配器被读取,第一个适配器的textview保持为空 任何帮助都将不胜感激 public void run () { if (t.getState() == Thread.State.TERMINATED) {

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

只有第二个适配器被读取,第一个适配器的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);    
}
public void run(){
if(t.getState()==Thread.State.TERMINATED){
adapter2=new ArrayAdapter(getApplicationContext(),R.layout.listlook,R.id.txtl2,names);
setListAdapter(适配器2);
adapter=new ArrayAdapter(getApplicationContext(),R.layout.listlook,R.id.txtl1,注释);
setListAdapter(适配器);
返回;
}否则{
h、 邮递延迟(本次为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中使用的布局?我真的不知道我在做什么。

您有两行代码
setListAdapter()
。第二个覆盖第一个。如果您有两个
列表视图
,请执行以下操作:

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

您有两行带有
setListAdapter()
。第二个覆盖第一个。如果您有两个
列表视图
,请执行以下操作:

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

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

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

首先,将两个列表合并到一个类中,并构建一个
列表
,而不是两个数组:

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

}
其中
帖子
是帖子的
列表

注意:您需要确保在
listlook
布局中有
TextView
条目,这些条目的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]);
}
List posts=new ArrayList();
for(int i=0;i
您告诉列表视图您要使用
适配器2
,然后告诉它您要使用
适配器
-它一次只能从一个适配器读取数据

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

首先,将两个列表合并到一个类中,并构建一个
列表
,而不是两个数组:

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

}
其中
帖子
是帖子的
列表

注意:您需要确保您的
listlook
布局中的
TextView
条目的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]);
}
List posts=new ArrayList();
for(int i=0;i
一个适配器连接到一个ListView。我猜您的活动只有一个ListView,因为每个ListView只能有一个适配器,所以您正在用第二个适配器替换第一个适配器。这看起来只有第二个适配器被使用。如果您想同时显示这两个适配器,您可能需要添加另一个ListView,或者将两个列表放在一个列表中,例如nd重试。嘿,Daniel,我正在使用一个带有两个文本视图的自定义listview,但我有点自学成才,无法理解关于这类事情的现有代码。感谢您的回复:)我认为问题在于,您不理解listView适配器背后的想法。listView没有特定的TESxView计数。您可以显示listLook布局吗?一个适配器连接到listView。我猜您的活动只有一个listView,因为每个listView只能有一个适配器,所以您要用秒1。看起来只有第二个适配器被使用。如果你想同时显示这两个,你可能想添加另一个ListView,或者将两个列表都放在一个列表中,然后重试。嘿,Daniel,我使用的是一个自定义ListView和两个TextView,但我有点自学成才,无法理解关于这类事情的现有代码。谢谢你的帮助他回答:)我认为问题在于,您不理解listView适配器背后的想法。ListView没有特定的TESxView计数。可以显示listLook布局吗?我正在用PHPMySQL数据库中的数据填充列表。答案信息丰富,但不太熟悉在一个活动中使用不同的类,我是否按原样创建类?我将把调用JSON对象的方法放在哪里?您可以使用我上面添加的代码,使用现有字符串数组创建
Post
对象列表。检索数据是一个完全不同的问题;如果您不确定如何做,我建议您进行更多的研究,如果您仍然无法找到答案,请打开一个新问题。如果您正在从SQL数据库读取数据,您可能需要查看CustomCursorAdapter列表正在填充,服务器将