gpt4 book ai didi

android - BaseAdapter 类中的位置重置

转载 作者:行者123 更新时间:2023-11-29 01:59:34 25 4
gpt4 key购买 nike

嗨,我是这个机器人的新手。我只是对基本适配器感到困惑。我的问题是考虑在一个数组中我有 10 个项目(从 0 到 9)。在 baseadapter 的 getview() 选项中,我在 textview 中显示它。但在再次正确执行 5 次后,位置将重置为 0。因此项目重复两次。

这是我的适配器类:

public class ListViewwithimageAdapter extends BaseAdapter
{
private static Context contxt;
final String URL = "http://xxxx.in/SSDAA.xml";

final String[] kickerimage = new String[150];

ListViewwithimageAdapter(Context conxt)
{
// System.out.println("inside cons");
this.contxt=conxt;
}
{

}
public String[] getelement()
{
// System.out.println("Insid getelement");
ArrayList<String> menuItems = new ArrayList<String>();
TaplistingParser parser = new TaplistingParser();
String xml= parser.getXmlFromUrl(URL);
Document doc=parser.getDomElement(xml);
// System.out.println("sssss="+doc);
NodeList nl=doc.getElementsByTagName("article");
final String[] url= new String[nl.getLength()];

// String headings = null;
for(int i=0; i < nl.getLength(); i++ )
{
// System.out.println("i="+i);
HashMap<String, String> map = new HashMap<String, String>();
Element e = (Element) nl.item(i);
// map.put("Title", parser.getValue(e, "title"));
// map.put("Date", parser.getValue(e, "create_date"));
url[i]=parser.getValue(e, "url");
// System.out.println("b4 kick");
// System.out.println("value="+parser.getValue(e, "title"));
kickerimage[i]=parser.getValue(e, "kickerimage");
// System.out.println("after kick");
// System.out.println("kick="+kickerimage[i]);
menuItems.add(parser.getValue(e, "title"));
}
// System.out.println("b4 items array");
String[] itemsarray = new String[menuItems.size()];
// System.out.println("subbu");
itemsarray=menuItems.toArray(itemsarray);
// System.out.println("subbu1");
// System.out.println("in last");
return itemsarray;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return getelement().length;
}

@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return getelement()[position];
}

@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
// System.out.println("pos in id="+position);
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent)
{
// TODO Auto-generated method stub
System.out.println("pos in id="+position); ------------------->This soutline gives output as(0,1,2,3,4,5,0).
Bitmap bitmap = DownloadImage(
kickerimage[position] );
LayoutInflater inflater = (LayoutInflater) contxt
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View listView;
if (convertView == null)
{
listView = new View(contxt);

listView = inflater.inflate(R.layout.homelistrow, null);
System.out.println("pos="+position);
System.out.println("item="+getItem(position));

TextView textView = (TextView) listView
.findViewById(R.id.name_label);
textView.setText(getelement()[position]);

ImageView imageView = (ImageView) listView
.findViewById(R.id.icon);
imageView.setImageBitmap(bitmap);
}
else
{
listView = (View) convertView;
}
return listView;

}

private Bitmap DownloadImage(String URL)
{
// System.out.println("image inside="+URL);
Bitmap bitmap = null;
InputStream in = null;
try {
in = OpenHttpConnection(URL);
bitmap = BitmapFactory.decodeStream(in);
in.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// System.out.println("image last");
return bitmap;
}
private InputStream OpenHttpConnection(String urlString)
throws IOException
{
InputStream in = null;
int response = -1;

URL url = new URL(urlString);
URLConnection conn = url.openConnection();

if (!(conn instanceof HttpURLConnection))
throw new IOException("Not an HTTP connection");

try{
HttpURLConnection httpConn = (HttpURLConnection) conn;
httpConn.setAllowUserInteraction(false);
httpConn.setInstanceFollowRedirects(true);
httpConn.setRequestMethod("GET");
httpConn.connect();

response = httpConn.getResponseCode();
if (response == HttpURLConnection.HTTP_OK) {
in = httpConn.getInputStream();
}
}
catch (Exception ex)
{
throw new IOException("Error connecting");
}
return in;
}

}

我的主页列表:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageView
android:id="@+id/icon"
android:layout_width="80dp"
android:layout_height="80dp"
android:paddingLeft="10dp"
android:paddingRight="10dp" />

<TextView
android:id="@+id/name_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/icon"
android:paddingBottom="10dp"
android:textColor="#ffffff"
android:textSize="16dp" />


</RelativeLayout>

在我的 Activity 设置适配器中:

 ListView l2= (ListView)findViewById(R.id.list);
ListViewwithimageAdapter adapter = new ListViewwithimageAdapter(this);
l2.setAdapter(adapter);

请帮帮我。提前致谢。

最佳答案

我认为您没有完全理解适配器中 View 重用的概念。适配器和 ListView 一起做的是,首先它为您可以看到的每个列表项创建一个 View 。当您开始向下滚动时,最顶层的 View 不再可见, ListView 需要一个新的 View 来显示新项目。现在,适配器不会释放消失的 View 并分配一个全新的 View ,而是为您提供消失的 View (如 convertView),因此您不必分配一个新 View (这相对耗时) 转换 此 View 使其适合给定位置的项目。所以在你的情况下,当你得到一个非空的 convertView 不要返回未改变的(因为那样它看起来和刚刚消失在顶部的那个一样),而是调整它以在给定位置显示项目,即相应地设置它的图像和文本。

顺便说一句。您不应该经常调用代价高昂的 getelement()。相反,只需在适配器的构造函数中调用它并存储返回的数组以供以后在 getCount()getView() 等中访问。

关于android - BaseAdapter 类中的位置重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13339568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com