Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.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 为什么适配器要将同一位置多次添加到ListView?_Java_Android_Xml - Fatal编程技术网

Java 为什么适配器要将同一位置多次添加到ListView?

Java 为什么适配器要将同一位置多次添加到ListView?,java,android,xml,Java,Android,Xml,不知道它有多清晰,但我遇到的问题是,我的适配器多次从树映射添加相同的位置。这不应该发生/它多次添加同一部电影 我已经看过代码,并试图遵循代码的循环,但我似乎找不到问题所在 我已经做了我的代码的GIST,因为它太长,我不想垃圾邮件的页面 如果你们真的想知道这一切,我会更新我的问题 我的应用程序向API发出请求,并获取电影ID、标题、信息、海报的树状图。。。等等这个问题与我的ListViewAdapter有关 ListViewAdapter package com.example.zd

不知道它有多清晰,但我遇到的问题是,我的适配器多次从树映射添加相同的位置。这不应该发生/它多次添加同一部电影

我已经看过代码,并试图遵循代码的循环,但我似乎找不到问题所在

我已经做了我的代码的GIST,因为它太长,我不想垃圾邮件的页面

如果你们真的想知道这一切,我会更新我的问题

我的应用程序向API发出请求,并获取电影ID、标题、信息、海报的树状图。。。等等这个问题与我的ListViewAdapter有关

ListViewAdapter

package com.example.zdroa.fetchmovies;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.squareup.picasso.Picasso;

import java.util.TreeMap;

class ListViewAdaptor extends BaseAdapter {

    private Context mContext;
    private TreeMap<Integer, String> urls;
    private TreeMap<Integer, String> titles;

    ListViewAdaptor(Context context, TreeMap<Integer, String> URLS, TreeMap<Integer, String> TITLES) {
        mContext = context;
        urls = URLS;
        titles = TITLES;
    }

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

    @Override
    public Object getItem(int position) {
        return null;
    }

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

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

        if (convertView == null) {
            convertView = View.inflate(mContext, R.layout.results_layout, null);
        }
        ImageView imageView = (ImageView) convertView.findViewById(R.id.ivPosters);
        TextView textView = (TextView) convertView.findViewById(R.id.results_layout_tv_movie_name);

        Drawable d = mContext.getResources().getDrawable(R.drawable.place_holder_img);


        String link_end = urls.ceilingEntry(position).getValue();
        String title = titles.ceilingEntry(position).getValue();

        Picasso.with(mContext)
                .load("http://image.tmdb.org/t/p/w185" + link_end)
                .placeholder(d)
                .into(imageView);

        textView.setText(title);


        return convertView;
    }
}
package com.example.zdroa.fetchmovies;
导入android.content.Context;
导入android.graphics.drawable.drawable;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.ImageView;
导入android.widget.TextView;
导入com.squareup.picasso.picasso;
导入java.util.TreeMap;
类ListViewAdapter扩展了BaseAdapter{
私有上下文;
私有树映射URL;
私有树形图标题;
ListViewAdapter(上下文上下文、树映射URL、树映射标题){
mContext=上下文;
URL=URL;
头衔=头衔;
}
@凌驾
public int getCount(){
返回url.size();
}
@凌驾
公共对象getItem(int位置){
返回null;
}
@凌驾
公共长getItemId(int位置){
返回0;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
if(convertView==null){
convertView=查看.充气(mContext,R.layout.results\u layout,null);
}
ImageView ImageView=(ImageView)convertView.findViewById(R.id.ivd);
TextView TextView=(TextView)convertView.findViewById(R.id.results\u layout\u tv\u movie\u name);
Drawable d=mContext.getResources().getDrawable(R.Drawable.place\u holder\u img);
字符串link_end=url.ceilingEntry(position.getValue();
字符串title=titles.ceilingEntry(position.getValue();
毕加索(McContext)
.加载(“http://image.tmdb.org/t/p/w185“+链接(结束)
.占位符(d)
.进入(图像视图);
textView.setText(标题);
返回视图;
}
}
MainActivityFragment.java

package com.example.zdroa.fetchmovies;

import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.TreeMap;

public class MainActivityFragment extends Fragment {

    private static String API_KEY = "b692b9da86f1cf0c1b623ea6e2770101";

    ListView listView;
    Button button;

    static TreeMap<Integer, Integer> IDS;
    static TreeMap<Integer, String> TITLES;
    static TreeMap<Integer, String> POSTERS;
    static TreeMap<Integer, String> GENRES;
    static TreeMap<Integer, String> PRODUCTION_COUNTRIES;
    static TreeMap<Integer, String> OVERVIEW;
    static TreeMap<Integer, String> RUNTIME;

    public MainActivityFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container, false);

        listView = (ListView) rootView.findViewById(R.id.lvMovies);

        new ImageLoadTask().execute();

        //if fragment is visible
        if (getActivity() != null) {


            listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    System.out.println(TITLES.ceilingEntry(position).getValue());
                }
            });
        }
        return rootView;
    }

    @Override
    public void onStart() {
        super.onStart();

    }

    private class ImageLoadTask extends AsyncTask<Void, Void, Void> {

        @Override
        protected Void doInBackground(Void... params) {

            IDS = new TreeMap<>();

            IDS.put(1, 2);
            IDS.put(2, 3);
            IDS.put(3, 5);
            IDS.put(4, 6);
            IDS.put(5, 8);
            IDS.put(6, 9);
            IDS.put(7, 11);
            IDS.put(8, 12);
            IDS.put(9, 13);
            IDS.put(10, 14);


            populateTreeMaps();


            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            if (getActivity() != null) {
                ListViewAdaptor adapter = new ListViewAdaptor(getActivity(), POSTERS, TITLES);
                listView.setAdapter(adapter);

                System.out.println(POSTERS);
                System.out.println(TITLES);
            }
        }

        private Void populateTreeMaps() {
            HttpHandler httpHandler = new HttpHandler();

            TITLES = new TreeMap<>();
            POSTERS = new TreeMap<>();

            for (int i = 0; i < IDS.size(); i++) {
                String jsonString = httpHandler.makeServiceCall("https://api.themoviedb.org/3/movie/" + IDS.ceilingEntry(i).getValue() + "?api_key=" + API_KEY);

                if (jsonString != null) {
                    try {
                    //POPULATE ALL THE GRAPHS HERE
                        getTitles(jsonString, IDS.ceilingEntry(i).getValue());
                        getPosterURLs(jsonString, IDS.ceilingEntry(i).getValue());

                    } catch (JSONException e) {
                        return null;
                    }
                }
            }
            return null;
        }

        private void getTitles(String JSONString, Integer mov_id) throws JSONException {
            JSONObject jsonObject = new JSONObject(JSONString);

            String title = jsonObject.getString("title");

            TITLES.put(mov_id, title);
        }

        private void getPosterURLs(String JSONString, Integer mov_id) throws JSONException {
            JSONObject jsonObject = new JSONObject(JSONString);

            String url = jsonObject.getString("poster_path");

            POSTERS.put(mov_id, url);
        }

        private void getYoutubeLink() {
        }
    }
}
package com.example.zdroa.fetchmovies;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.support.v4.app.Fragment;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.AdapterView;
导入android.widget.Button;
导入android.widget.ListView;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.util.TreeMap;
公共类MainActivityFragment扩展了片段{
专用静态字符串API_KEY=“b692b9da86f1cf0c1b623ea6e2770101”;
列表视图列表视图;
按钮;
静态树映射ID;
静态树形图标题;
静态树形图海报;
静态树形图类型;
静态树状图生产国;
静态树图概述;
静态树映射运行时;
公共维护活动片段(){
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图根视图=充气机。充气(R.layout.fragment_main,容器,错误);
listView=(listView)rootView.findViewById(R.id.lvMovies);
新建ImageLoadTask().execute();
//如果碎片是可见的
如果(getActivity()!=null){
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
System.out.println(TITLES.ceilingEntry(position.getValue());
}
});
}
返回rootView;
}
@凌驾
public void onStart(){
super.onStart();
}
私有类ImageLoadTask扩展了AsyncTask{
@凌驾
受保护的Void doInBackground(Void…参数){
IDS=新树映射();
id.put(1,2);
id.put(2,3);
id.put(3,5);
id.put(4,6);
id.put(5,8);
id.put(6,9);
id.put(7,11);
id.put(8,12);
id.put(9,13);
id.put(10,14);
populateTreeMaps();
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
如果(getActivity()!=null){
ListViewAdapter=新的ListViewAdapter(getActivity()、海报、标题);
setAdapter(适配器);
系统输出打印(海报);
系统输出打印项次(标题);
}
}
私有Void populateTreeMaps(){
HttpHandler HttpHandler=新的HttpHandler();
TITLES=新树映射();
海报=新树形图();
对于(int i=0;i @Override
public Object getItem(int position) {
    return urls.get(position);
}

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