Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.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
Java 如何在列表视图的ArrayAdapter中使用多个textview?_Java_Android_Listview_Android Arrayadapter - Fatal编程技术网

Java 如何在列表视图的ArrayAdapter中使用多个textview?

Java 如何在列表视图的ArrayAdapter中使用多个textview?,java,android,listview,android-arrayadapter,Java,Android,Listview,Android Arrayadapter,我试图在列表行中显示单独的项目。所以我使用4个文本视图。但是我使用arrayadapter来扩展我的类活动。现在我必须根据textview将字符串列表放在一行中。如何做到这一点?非常感谢您提供的任何帮助…在这种情况下,我通常会扩展ArrayAdapter。通常,您只需要覆盖适配器中的两个函数-getView和一个构造函数 适配器的代码如下所示: /** class to act as list adapter for rows List */ private static class FourT

我试图在列表行中显示单独的项目。所以我使用4个文本视图。但是我使用arrayadapter来扩展我的类活动。现在我必须根据textview将字符串列表放在一行中。如何做到这一点?非常感谢您提供的任何帮助…

在这种情况下,我通常会扩展ArrayAdapter。通常,您只需要覆盖适配器中的两个函数-getView和一个构造函数

适配器的代码如下所示:

/** class to act as list adapter for rows List */
private static class FourTextListAdapter extends ArrayAdapter<MyDataClass> {

    /** To cache views of item */
    private static class ViewHolder {
        private TextView text1;
        private TextView text2;
        private TextView text3;
        private TextView text4;

        /**
         * General constructor
         */
        ViewHolder() {
            // nothing to do here
        }
    }

    /** Inflater for list items */
    private final LayoutInflater inflater;

    /**
     * General constructor
     *
     * @param context
     * @param resource
     * @param textViewResourceId
     * @param objects
     */
    public FourTextListAdapter(final Context context,
            final int resource,
            final int textViewResourceId,
            final List<User> objects) {
        super(context, resource, textViewResourceId, objects);

        this.inflater = LayoutInflater.from(context);
    }

    @Override
    public View getView(final int position, final View convertView, final ViewGroup parent) {

        View itemView = convertView;
        ViewHolder holder = null;
        final MyDataClass item = getItem(position);

        if(null == itemView) {
            itemView = this.inflater.inflate(R.layout.four_texts_item, parent, false);

            holder = new ViewHolder();

            holder.text1 = (TextView)itemView.findViewById(R.id.text1);
            holder.text2 = (TextView)itemView.findViewById(R.id.text2);
            holder.text3 = (TextView)itemView.findViewById(R.id.text3);
            holder.text4 = (TextView)itemView.findViewById(R.id.text4);

            itemView.setTag(holder);
        } else {
            holder = (ViewHolder)itemView.getTag();
        }

        holder.text1.setText(item.getText1());
        holder.text2.setText(item.getText2());
        holder.text3.setText(item.getText3());
        holder.text4.setText(item.getText4());

        return itemView;
    }
}
在这种情况下,我通常会扩展ArrayAdapter。通常,您只需要覆盖适配器中的两个函数-getView和一个构造函数

适配器的代码如下所示:

/** class to act as list adapter for rows List */
private static class FourTextListAdapter extends ArrayAdapter<MyDataClass> {

    /** To cache views of item */
    private static class ViewHolder {
        private TextView text1;
        private TextView text2;
        private TextView text3;
        private TextView text4;

        /**
         * General constructor
         */
        ViewHolder() {
            // nothing to do here
        }
    }

    /** Inflater for list items */
    private final LayoutInflater inflater;

    /**
     * General constructor
     *
     * @param context
     * @param resource
     * @param textViewResourceId
     * @param objects
     */
    public FourTextListAdapter(final Context context,
            final int resource,
            final int textViewResourceId,
            final List<User> objects) {
        super(context, resource, textViewResourceId, objects);

        this.inflater = LayoutInflater.from(context);
    }

    @Override
    public View getView(final int position, final View convertView, final ViewGroup parent) {

        View itemView = convertView;
        ViewHolder holder = null;
        final MyDataClass item = getItem(position);

        if(null == itemView) {
            itemView = this.inflater.inflate(R.layout.four_texts_item, parent, false);

            holder = new ViewHolder();

            holder.text1 = (TextView)itemView.findViewById(R.id.text1);
            holder.text2 = (TextView)itemView.findViewById(R.id.text2);
            holder.text3 = (TextView)itemView.findViewById(R.id.text3);
            holder.text4 = (TextView)itemView.findViewById(R.id.text4);

            itemView.setTag(holder);
        } else {
            holder = (ViewHolder)itemView.getTag();
        }

        holder.text1.setText(item.getText1());
        holder.text2.setText(item.getText2());
        holder.text3.setText(item.getText3());
        holder.text4.setText(item.getText4());

        return itemView;
    }
}

尝试使用SimpleAdapter而不是ArrayAdapter

ArrayList<HashMap<String, String>> sampleArrayList;
SimpleAdapter sampleListAdapter;

HashMap<String, String> sampleObjectMap;

for (SampleObject sampleObj : sampleList) {
    sampleObjectMap= new HashMap<String, String>();
        sampleObjectMap.put("value1", sampleObj.getValue1());
        sampleObjectMap.put("value2", sampleObj.getValue2());
    sampleObjectMap.put("value3", sampleObj.getValue3());
     sampleObjectMap.put("value4", sampleObj.getValue4());

        sampleArrayList.add(sampleObjectMap);
}

sampleListAdapter= new SimpleAdapter(
            context, sampleArrayList,
            R.layout.custom_list_layout, new String[] {
                    "value1", "value2" , "value3", "value4"},
                    new int[] { R.id.list_content_column1,
                            R.id.list_content_column2,
                            R.id.list_content_column3,
                            R.id.list_content_column4});

        sampleListView.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {

                HashMap<String, String> sampleObjectMapLocal = sampleArrayList
                                    .get(position);
                final String value1Obj = sampleObjectMapLocal                                       .get("value1");

                System.out.println("value1Obj : " + value1Obj);

            }
        });
在上面的代码中,使用ArrayList sampleArrayList填充listView内容 因此,可以使用键value1、value2、value3、value4访问任意列中的项目


希望这会有所帮助。

请尝试使用SimpleAdapter代替ArrayAdapter

ArrayList<HashMap<String, String>> sampleArrayList;
SimpleAdapter sampleListAdapter;

HashMap<String, String> sampleObjectMap;

for (SampleObject sampleObj : sampleList) {
    sampleObjectMap= new HashMap<String, String>();
        sampleObjectMap.put("value1", sampleObj.getValue1());
        sampleObjectMap.put("value2", sampleObj.getValue2());
    sampleObjectMap.put("value3", sampleObj.getValue3());
     sampleObjectMap.put("value4", sampleObj.getValue4());

        sampleArrayList.add(sampleObjectMap);
}

sampleListAdapter= new SimpleAdapter(
            context, sampleArrayList,
            R.layout.custom_list_layout, new String[] {
                    "value1", "value2" , "value3", "value4"},
                    new int[] { R.id.list_content_column1,
                            R.id.list_content_column2,
                            R.id.list_content_column3,
                            R.id.list_content_column4});

        sampleListView.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {

                HashMap<String, String> sampleObjectMapLocal = sampleArrayList
                                    .get(position);
                final String value1Obj = sampleObjectMapLocal                                       .get("value1");

                System.out.println("value1Obj : " + value1Obj);

            }
        });
在上面的代码中,使用ArrayList sampleArrayList填充listView内容 因此,可以使用键value1、value2、value3、value4访问任意列中的项目


希望这会有所帮助。

+1同意这一点,您也可以扩展BaseAdapter。在我的情况下,在BaseAdapter和ArrayAdapter之间选择哪一个?+1同意这一点,您也可以扩展BaseAdapter。在我的情况下,在BaseAdapter和ArrayAdapter之间选择哪一个