Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.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 名称在列表视图项中出现两次_Java_Android_Arrays_Android Listfragment - Fatal编程技术网

Java 名称在列表视图项中出现两次

Java 名称在列表视图项中出现两次,java,android,arrays,android-listfragment,Java,Android,Arrays,Android Listfragment,我试图设置一个两行列表视图,但每个字符串似乎都在项目中复制自己,而不是显示一次。我怎样才能防止这种情况发生?i、 e.我需要数据如下显示:对于第1项-美国,美国描述,而不是美国,美国;对于项目2-欧洲,欧洲描述,而不是欧洲,欧洲。请参阅屏幕截图以了解不希望出现的结果的证据 ListData.java public class ListData { public static final int[][] items = { {R.string.america,R.

我试图设置一个两行列表视图,但每个字符串似乎都在项目中复制自己,而不是显示一次。我怎样才能防止这种情况发生?i、 e.我需要数据如下显示:对于第1项-美国,美国描述,而不是美国,美国;对于项目2-欧洲,欧洲描述,而不是欧洲,欧洲。请参阅屏幕截图以了解不希望出现的结果的证据

ListData.java

public class ListData {

    public static final int[][] items = {
            {R.string.america,R.string.america_description},
            {R.string.europe, R.string.europe_description}
    };

}
public class ItemListAdapter extends BaseAdapter implements Filterable {

    private List<String> mData;
    private List<String> mFilteredData;
    private LayoutInflater mInflater;
    private ItemFilter mFilter;

    public ItemListAdapter (List<String> data, Context context) {
        mData = data;
        mFilteredData = data;
        mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

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

    @Override
    public String getItem(int position) {
        return mFilteredData.get(position);
    }

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

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

        String strItem = mFilteredData.get(position);
        ViewHolder holder;
        if (convertView == null) {
           convertView = mInflater.inflate(R.layout.item_row, parent, false);
            holder = new ViewHolder();

            holder.mTitle = (TextView) convertView.findViewById(R.id.item_title);
            holder.mDescription = (TextView) convertView.findViewById(R.id.item_description);

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

        holder.mTitle.setText(strItem);
        holder.mDescription.setText(strItem);

        return convertView;
    }

    @Override
    public Filter getFilter() {
        if (mFilter == null) {
            mFilter = new ItemFilter();
        }
        return mFilter;
    }

    /**
     * View holder
     */
    static class ViewHolder {
        private TextView mTitle;
        private TextView mDescription;
    }

    /**
     * Filter for filtering list items
     */
    private class ItemFilter extends Filter {

        /**
         * Invoked on a background thread.  This is where all the filter logic should go
         * @param constraint the constraint to filter on
         * @return the resulting list after applying the constraint
         */
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {

            FilterResults results = new FilterResults();

            if (TextUtils.isEmpty(constraint)) {
                results.count = mData.size();
                results.values = mData;
            } else {
                //Create a new list to filter on
                List<String> resultList = new ArrayList<>();
                for (String str : mData) {
                    if (str.toLowerCase().contains(constraint.toString().toLowerCase())) {
                        resultList.add(str);
                    }
                }
                results.count = resultList.size();
                results.values = resultList;
            }
            return results;
        }

        /**
         * Runs on ui thread
         * @param constraint the constraint used for the result
         * @param results the results to display
         */
        @SuppressWarnings("unchecked")
        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {

            if (results.count == 0) {
                notifyDataSetInvalidated();
            } else {
                mFilteredData = (ArrayList<String>)results.values;
                notifyDataSetChanged();
            }
        }
    }
}
ListViewAdapter

public class ItemListAdapter extends BaseAdapter implements Filterable {

    private List<String> mData;
    private List<String> mFilteredData;
    private LayoutInflater mInflater;
    private ItemFilter mFilter;

    public ItemListAdapter (List<String> data, Context context) {
        mData = data;
        mFilteredData = data;
        mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

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

    @Override
    public String getItem(int position) {
        return mFilteredData.get(position);
    }

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

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

        String strItem = mFilteredData.get(position);
        ViewHolder holder;
        if (convertView == null) {
           convertView = mInflater.inflate(R.layout.item_row, parent, false);

            holder = new ViewHolder();
            holder.mTitle = (TextView) convertView.findViewById(R.id.item_title);
            holder.mDescription = (TextView) convertView.findViewById(R.id.item_description);

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

        holder.mTitle.setText(strItem);
        holder.mDescription.setText(strItem);

        return convertView;
    }

    @Override
    public Filter getFilter() {
        if (mFilter == null) {
            mFilter = new ItemFilter();
        }
        return mFilter;
    }

    /**
     * View holder
     */
    static class ViewHolder {
        private TextView mTitle;
        private TextView mDescription;
    } 
}
公共类ItemListAdapter扩展BaseAdapter实现可过滤{
私有列表数据;
私人名单;
私人停车场;
私有项目过滤器;
公共ItemListAdapter(列表数据、上下文){
mData=数据;
mFilteredData=数据;
mInflater=(LayoutInflater)context.getSystemService(context.LAYOUT\u充气机\u服务);
}
@凌驾
public int getCount(){
返回mFilteredData.size();
}
@凌驾
公共字符串getItem(int位置){
返回mFilteredData.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
String strItem=mFilteredData.get(位置);
视窗座;
if(convertView==null){
convertView=mInflater.充气(R.layout.item_行,父项,false);
holder=新的ViewHolder();
holder.mTitle=(TextView)convertView.findViewById(R.id.item_title);
holder.mddescription=(TextView)convertView.findViewById(R.id.item_description);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
holder.mTitle.setText(strItem);
holder.mDescription.setText(strItem);
返回视图;
}
@凌驾
公共过滤器getFilter(){
if(mFilter==null){
mFilter=newitemfilter();
}
返回过滤器;
}
/**
*视图持有者
*/
静态类视窗夹{
私有文本视图mTitle;
私有文本视图mddescription;
} 
}
item_row.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:paddingRight="?android:attr/scrollbarSize"
    android:baselineAligned="false">

    <RelativeLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1">

        <TextView android:id="@+id/item_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:ellipsize="marquee"
            android:textColor="?android:attr/textColorPrimary" />

        <TextView android:id="@+id/item_description"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/item_title"
            android:layout_alignLeft="@id/item_title"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:textColor="?android:attr/textColorSecondary" />

    </RelativeLayout>

</LinearLayout>

ItemListadapter.java

public class ListData {

    public static final int[][] items = {
            {R.string.america,R.string.america_description},
            {R.string.europe, R.string.europe_description}
    };

}
public class ItemListAdapter extends BaseAdapter implements Filterable {

    private List<String> mData;
    private List<String> mFilteredData;
    private LayoutInflater mInflater;
    private ItemFilter mFilter;

    public ItemListAdapter (List<String> data, Context context) {
        mData = data;
        mFilteredData = data;
        mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

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

    @Override
    public String getItem(int position) {
        return mFilteredData.get(position);
    }

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

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

        String strItem = mFilteredData.get(position);
        ViewHolder holder;
        if (convertView == null) {
           convertView = mInflater.inflate(R.layout.item_row, parent, false);
            holder = new ViewHolder();

            holder.mTitle = (TextView) convertView.findViewById(R.id.item_title);
            holder.mDescription = (TextView) convertView.findViewById(R.id.item_description);

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

        holder.mTitle.setText(strItem);
        holder.mDescription.setText(strItem);

        return convertView;
    }

    @Override
    public Filter getFilter() {
        if (mFilter == null) {
            mFilter = new ItemFilter();
        }
        return mFilter;
    }

    /**
     * View holder
     */
    static class ViewHolder {
        private TextView mTitle;
        private TextView mDescription;
    }

    /**
     * Filter for filtering list items
     */
    private class ItemFilter extends Filter {

        /**
         * Invoked on a background thread.  This is where all the filter logic should go
         * @param constraint the constraint to filter on
         * @return the resulting list after applying the constraint
         */
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {

            FilterResults results = new FilterResults();

            if (TextUtils.isEmpty(constraint)) {
                results.count = mData.size();
                results.values = mData;
            } else {
                //Create a new list to filter on
                List<String> resultList = new ArrayList<>();
                for (String str : mData) {
                    if (str.toLowerCase().contains(constraint.toString().toLowerCase())) {
                        resultList.add(str);
                    }
                }
                results.count = resultList.size();
                results.values = resultList;
            }
            return results;
        }

        /**
         * Runs on ui thread
         * @param constraint the constraint used for the result
         * @param results the results to display
         */
        @SuppressWarnings("unchecked")
        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {

            if (results.count == 0) {
                notifyDataSetInvalidated();
            } else {
                mFilteredData = (ArrayList<String>)results.values;
                notifyDataSetChanged();
            }
        }
    }
}
公共类ItemListAdapter扩展BaseAdapter实现可过滤{
私有列表数据;
私人名单;
私人停车场;
私有项目过滤器;
公共ItemListAdapter(列表数据、上下文){
mData=数据;
mFilteredData=数据;
mInflater=(LayoutInflater)context.getSystemService(context.LAYOUT\u充气机\u服务);
}
@凌驾
public int getCount(){
返回mFilteredData.size();
}
@凌驾
公共字符串getItem(int位置){
返回mFilteredData.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
String strItem=mFilteredData.get(位置);
视窗座;
if(convertView==null){
convertView=mInflater.充气(R.layout.item_行,父项,false);
holder=新的ViewHolder();
holder.mTitle=(TextView)convertView.findViewById(R.id.item_title);
holder.mddescription=(TextView)convertView.findViewById(R.id.item_description);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
holder.mTitle.setText(strItem);
holder.mDescription.setText(strItem);
返回视图;
}
@凌驾
公共过滤器getFilter(){
if(mFilter==null){
mFilter=newitemfilter();
}
返回过滤器;
}
/**
*视图持有者
*/
静态类视窗夹{
私有文本视图mTitle;
私有文本视图mddescription;
}
/**
*用于筛选列表项的筛选器
*/
私有类ItemFilter扩展了筛选器{
/**
*在后台线程上调用。这是所有筛选器逻辑应该去的地方
*@param constraint要筛选的约束
*@应用约束后返回结果列表
*/
@凌驾
受保护的筛选器结果性能筛选(CharSequence约束){
FilterResults results=新的FilterResults();
if(TextUtils.isEmpty(约束)){
results.count=mData.size();
结果.values=mData;
}否则{
//创建要筛选的新列表
List resultList=new ArrayList();
for(字符串str:mData){
if(str.toLowerCase().contains(constraint.toString().toLowerCase())){
结果列表添加(str);
}
}
results.count=resultList.size();
results.values=结果列表;
}
返回结果;
}
/**
*在ui线程上运行
*@param constraint用于结果的约束
*@param results要显示的结果
*/
@抑制警告(“未选中”)
@凌驾
受保护的void publishResults(CharSequence约束、FilterResults结果){
如果(results.count==0){
notifyDataSetionValidated();
}否则{
mFilteredData=(ArrayList)results.values;
notifyDataSetChanged();
}
}
}
}

名称在
列表视图中显示两次,因为您同时传入
文本视图
相同的项目:

String strItem = mFilteredData.get(position);
为了避免这种情况,需要使用两个单独的字段传递给y