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