Удаленные изображения повторяются в списке - PullRequest
0 голосов
/ 31 октября 2011

Я пытаюсь разобрать удаленные изображения и текст в списке.код показан ниже:

public class ParseImagesActivity extends ListActivity {
String myURL;
String xml; 
 Document doc; 
 NodeList nodes; 
 int equal=1;


 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        xml = XmlParser.getXML("http://www.myurl.com");
         doc = XmlParser.XMLfromString(xml);
        nodes = doc.getElementsByTagName("item");
        for ( int i = 0; i < nodes.getLength(); i++) {

             Element e = (Element)nodes.item(i);
             myURL = XmlParser.getValue(e, "thumb");
             startParsing(myURL);
         }
    }

 private void startParsing(String url) {  
     new backgroundLoadListView().execute(url);

 }

public class backgroundLoadListView extends
        AsyncTask<String, String, String> {

    @Override
    protected void onPostExecute(String unused) {
        // TODO Auto-generated method stub
        setListAdapter(new MyCustomAdapter(ParseImagesActivity.this,  
                                                                R.layout.row, month));

    }

    @Override
    protected void onPreExecute() {

    }

    @Override
    protected String doInBackground(String... params) {
        // TODO Auto-generated method stub
         String url = params[0];
        preLoadSrcBitmap(url);
        return null;
    }

}

public class MyCustomAdapter extends ArrayAdapter<String> {
    Bitmap bm;

    public MyCustomAdapter(Context context, int textViewResourceId,
            String[] objects) {
        super(context, textViewResourceId, objects);

        // TODO Auto-generated constructor stub

        bm = srcBitmap;

    }

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

        View row = convertView;

        if(row==null){
            LayoutInflater inflater=getLayoutInflater();
            row=inflater.inflate(R.layout.row, parent, false);
                              } 

        TextView label=(TextView)row.findViewById(R.id.weekofday);
        label.setText(month[position]);
        ImageView icon=(ImageView)row.findViewById(R.id.icon);

        icon.setImageBitmap(bm);



        return row; 
        }   
    }

  Bitmap srcBitmap;
  private void preLoadSrcBitmap(String url){
    BitmapFactory.Options bmOptions;
    bmOptions = new BitmapFactory.Options();
    bmOptions.inSampleSize = 1;

    srcBitmap = LoadImage(url, bmOptions);

}

String[] month = {
        "January", "February", "March", "April",
        "May", "June", "July", "August",
        "September", "October", "November", "December"
        };

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    // TODO Auto-generated method stub
    //super.onListItemClick(l, v, position, id);
    String selection = l.getItemAtPosition(position).toString();
    Toast.makeText(this, selection, Toast.LENGTH_LONG).show();  
}

private Bitmap LoadImage(String URL, BitmapFactory.Options options)
{       
    Bitmap bitmap = null;
    InputStream in = null;       
    try {
        in = OpenHttpConnection(URL);
        bitmap = BitmapFactory.decodeStream(in, null, options);
        in.close(); 
    } catch (IOException e1) {
    }

    return bitmap;                  
}

private InputStream OpenHttpConnection(String strURL) throws IOException{
    InputStream inputStream = null;
    URL url = new URL(strURL);
    URLConnection conn = url.openConnection();

    try{
        HttpURLConnection httpConn = (HttpURLConnection)conn;
        httpConn.setRequestMethod("GET");
        httpConn.connect();

        if (httpConn.getResponseCode() == HttpURLConnection.HTTP_OK) {
            inputStream = httpConn.getInputStream();    

        }   
    }
    catch (Exception ex){
    }

    return inputStream; 
}

У меня также есть класс xmlparser.Есть разные изображения для анализа в списке.Когда я запускаю приложение, изображения повторяются в просмотре списка, это означает, что 1-е изображение отображается во всех строках просмотра списка, а затем исчезает, а 2-е появляется во всех строках и исчезает, и изображения постоянно отображаются и исчезают, а последнее изображение отображается во всех строках просмотра списка и не исчезает.Я думаю, что я делаю что-то неправильно в методе getView () в классе MyCustomadapter.Я не могу понять, как решить эту проблему?Я хочу 1-е изображение в 1-м ряду и 2-е во 2-м ряду и т. Д. Как это исправить?Кто-нибудь может помочь?Заранее спасибо.

1 Ответ

1 голос
/ 31 октября 2011

Похоже, вы создаете новый AsyncTask (BackgroundLostListView) для каждого «элемента» в XML.Когда каждая из этих AsyncTasks заканчивается, вы устанавливаете новый ListAdapter (MyCustomAdapter) для каждого из них и имеете одно растровое изображение, связанное с этим адаптером.Вы хотите иметь один адаптер для всего ListView, который имеет полный набор данных (для всех строк, включая сами растровые изображения или, возможно, URL-адреса для их загрузки в фоновом режиме).

Также обратите внимание, что AsyncTask кажетсячтобы использовать только один из трех параметров, но вы установили их все в строки.Для любого параметра, который вы не используете, вы должны использовать вместо этого «Void».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...