0

私はAndroidが初めてで、フラグメントに問題があります。6 つの異なるフラグメントがあります。そのうちの 1 つに、ライブラリ「ユニバーサル イメージ ローダー」を使用した URL からの画像のギャラリーがあります。問題は、フラグメントを変更して元に戻すときに発生します。画像リストは、変更して戻るたびに倍増します。この問題に何時間も費やしましたが、解決策が見つかりません。

どうもありがとうございました!

public static class DummySectionFragmentNews extends ListFragment {


        ArrayList<String> titulos = new ArrayList<String>();

        ArrayList<String> Imagenes = new ArrayList<String>();


        String[] titulosFinal;

        String[] ImagenesFinal;


        ListView list;
        ImageLoader loader = ImageLoader.getInstance();

        final Context context = this.getActivity();
        DisplayImageOptions op;

        public static final String ARG_SECTION_NUMBER = "section_number";

        public DummySectionFragmentNews() {
        }

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

        @Override
        public void onActivityCreated(Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);

            String noticias = "";
            SharedPreferences prefs = this.getActivity().getSharedPreferences("ApplicationInfo",Context.MODE_PRIVATE);
            noticias = prefs.getString("Noticias", "");

            try {
                JSONArray news = new JSONArray(noticias);
                //System.out.println("JSON NOTICIAS :" + news.length());

                for (int i = 0; i < news.length(); i++) {

                    JSONObject jsonObject = news.getJSONObject(i);
                    String titulo = jsonObject.getString("title");

                    String imagen = jsonObject.getString("image");


                    titulos.add(titulo);

                    Imagenes.add(imagen);


                  }



            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            titulosFinal = new String[titulos.size()];
            titulosFinal = titulos.toArray(titulosFinal);



            ImagenesFinal = new String[Imagenes.size()];
            ImagenesFinal = Imagenes.toArray(ImagenesFinal);




            loader.init(ImageLoaderConfiguration.createDefault(this.getActivity()));

            op = new DisplayImageOptions.Builder()
                    .showStubImage(R.drawable.ic_stub)
                    .showImageForEmptyUri(R.drawable.ic_empty)
                    .displayer(new RoundedBitmapDisplayer(20))
                    .build();


            list = (ListView) getActivity().findViewById(android.R.id.list);
            ((ListView) list).setAdapter(new ItemAdapter());
            list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    //tartImagePagerActivity(position);

                  Intent i=new Intent(context,SeparateView.class);
                  i.putExtra("pos",position+"");
                  startActivity(i);
                }
            });
          }

         public void onBackPressed() {
                  onBackPressed();
         }

         class ItemAdapter extends BaseAdapter {

                private class ViewHolder {
                    public TextView text;
                    public ImageView image;
                }

                @Override
                public int getCount() {
                    return ImagenesFinal.length;
                }

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

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

                @Override
                public View getView(final int position, View convertView, ViewGroup parent) {
                    View v = convertView;
                    final ViewHolder holder;

                    System.out.println("Hello " + position);

                    if (convertView == null) {
                        v = getActivity().getLayoutInflater().inflate(R.layout.image_list_layout, parent, false);
                        holder = new ViewHolder();
                        holder.text = (TextView) v.findViewById(R.id.text);
                        holder.image = (ImageView) v.findViewById(R.id.image);
                        v.setTag(holder);
                    } else {
                        holder = (ViewHolder) v.getTag();
                    }

                    holder.text.setText(titulosFinal[position]);
                    loader.displayImage(ImagenesFinal[position], holder.image, op, null);

                    return v;
                }
            }

    }
4

2 に答える 2

0

onActivityCreated()後に下の行を入れるsuper.onActivityCreated(savedInstanceState);

Imagenes = new ArrayList<String>();

結果についてコメントしてください

于 2013-10-16T11:52:01.353 に答える
0

メソッドを変更する

public void onActivityCreated(Bundle savedInstanceState) 

public void onCreate(Bundle savedInstanceState) 

それはそれを修正する必要があります。

onActivityCreatedフラグメントを切り替えるたびに呼び出されるため、毎回リストに画像が追加されます。onCreate最初に一度だけ呼び出されます。Fragment ライフサイクルの詳細については、http: //developer.android.com/guide/components/fragments.htmlを参照してください。

于 2013-10-16T11:55:53.723 に答える