2014-01-06 3 views
1

Мне нужно показать список изображений в представлении списка, для того, чтобы сделать процесс загрузки изображений в виде списка с помощью CustomAdapter, вот моя проблема: мне нужно показать только одно изображение, то есть видимый счет должен быть только одним. Мне нужно избегать показа изображений 2 изображений. Плеватель найдет приложение для справки. (Я должен использовать ListView для этого) enter image description here и мой кодКак показать отдельный элемент в андроиде Listview?

MainActivity.Java:

public class MainActivity extends Activity { 
    ListView mList; 

    String[] imageURL = { 
      "http://ptsdperspectives.org/wp-content/uploads/2013/07/sleepingbaby.jpg", 
      "http://images2.fanpop.com/image/photos/14300000/Sweet-Angels-sweety-babies-14394647-1600-1200.jpg", 
      "http://1.bp.blogspot.com/-QDe-qthaKz0/UAWZ6aakdoI/AAAAAAAAFK4/2zlaIu1r20Q/s1600/baby.jpg", 
      "http://images4.fanpop.com/image/photos/17400000/Sweet-angel-sweety-babies-17465667-600-399.jpg", 
      "http://media.npr.org/assets/img/2013/05/02/istock-11437508-baby-hat_custom-83708739a42b84de8f35d7a57ee868fce921d619-s6-c30.jpg", 
      "http://my.fakingnews.firstpost.com/files/2013/09/Baby.jpg", 
      "http://i.telegraph.co.uk/multimedia/archive/02165/swaddle-baby_2165340b.jpg" }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     mList = (ListView) findViewById(R.id.image_list_view); 
     ArrayList<String> mArrayList = new ArrayList<String>(); 
     for (String s : imageURL) { 
      mArrayList.add(s); 
     } 
     CustomImageAdapter mAdapter = new CustomImageAdapter(MainActivity.this, 
       mArrayList); 
     mList.setAdapter(mAdapter); 
     mAdapter.notifyDataSetChanged(); 
     // mList.setOnScrollListener(new OnScrollListener() { 
     // 
     // @Override 
     // public void onScrollStateChanged(AbsListView view, int scrollState) { 
     // // TODO Auto-generated method stub 
     // Log.e("onScrollStateChanged -scrollState", scrollState + ""); 
     // } 
     // 
     // @Override 
     // public void onScroll(AbsListView view, int firstVisibleItem, 
     // int visibleItemCount, int totalItemCount) { 
     // Log.e("onScroll -firstVisibleIteml", firstVisibleItem + ""); 
     // Log.e("onScroll -visibleItemCount", visibleItemCount + ""); 
     // Log.e("onScroll -totalItemCount", totalItemCount + ""); 
     // // TODO Auto-generated method stub 
     // } 
     // }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 
} 

CustomAdapter.Java

public class CustomImageAdapter extends BaseAdapter { 

    private Activity activity; 
    private static LayoutInflater inflater = null; 
    protected ImageLoader imageLoader = ImageLoader.getInstance(); 
    DisplayImageOptions options; 
    ArrayList<String> url = new ArrayList<String>(); 

    @SuppressWarnings("deprecation") 
    public CustomImageAdapter(Activity a, ArrayList<String> url2) { 

     activity = a; 
     url = url2; 
     inflater = (LayoutInflater) activity 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     imageLoader.init(ImageLoaderConfiguration.createDefault(activity)); 
     options = new DisplayImageOptions.Builder().resetViewBeforeLoading() 
       .cacheOnDisc().imageScaleType(ImageScaleType.IN_SAMPLE_INT) 
       .bitmapConfig(Bitmap.Config.RGB_565) 
       .displayer(new FadeInBitmapDisplayer(100)).build(); 

    } 

    public int getCount() { 
     return url.size(); 
    } 

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

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

    public static class ViewHolder { 
     public TextView u_name; 
     public ImageView icon; 

    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     View vi = convertView; 
     ViewHolder holder; 
     if (convertView == null) { 
      vi = inflater.inflate(R.layout.list_items, null); 
      holder = new ViewHolder(); 
      holder.icon = (ImageView) vi.findViewById(R.id.images_bg); 
      vi.setTag(holder); 
     } else 
      holder = (ViewHolder) vi.getTag(); 

     holder.icon.setTag(url.get(position)); 
     imageLoader.displayImage(url.get(position), holder.icon); 

     return vi; 
    } 
} 
+4

Вы можете использовать ViewPager также, пожалуйста, проверьте. Http://developer.android.com/training/animation/screen-slide.html –

+0

просто установите высоту изображения для экрана screenheight-actionbarheight ... –

+0

@Virag: Да, но в основном доступны горизонтальные пейджеры. Я попробовал верный код библиотеки пейджера по этой ссылке https://github.com/JakeWharton/Android-DirectionalViewPager/. К сожалению, я получил «java.lang.IllegalStateException: не могу выполнить это действие после ошибки onSaveInstanceState», поэтому я только ищу, как выше – Aerrow

ответ

1

Элемент управления ListView производится для списков несколько объекты. Вы хотите показывать только один элемент за раз? Попробуйте использовать ViewPager. Вот отличный учебник для него:

http://developer.android.com/training/animation/screen-slide.html

Я надеюсь, что это помогает.

0

Возможно, это будет возможно, но если вы используете ViewPager, то это будет более надежное решение.

Выполните этот код:

import android.annotation.SuppressLint; 
import android.os.Bundle; 
import android.os.Handler; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.util.DisplayMetrics; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.view.ViewGroup.MarginLayoutParams; 
import android.view.Window; 
import android.widget.*; 

public class DemoPhotoAlbumActivity extends FragmentActivity implements AdapterView.OnItemSelectedListener, ViewPager.OnPageChangeListener { 

    private ViewPager viewPager; 
    ImageButton home,file,spanner,info; 
    // private Gallery gallery; 

    protected Integer[] mImageIds = { 

      R.drawable.screen_02, 
      R.drawable.screen_03, 
      R.drawable.screen_04, 
      R.drawable.screen_05, 
      R.drawable.screen_06, 
    }; 

// protected Integer[] mImageIdsTab = { 
//   R.drawable.tab1, 
//   R.drawable.tab2, 
//   R.drawable.tab3, 
//   R.drawable.tab4, 
//   R.drawable.tab5, 
//   R.drawable.tab6, 
// }; 

    private Handler handler; 

    /** 
    * Called when the activity is first created. 
    */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.image_gallery); 

     DisplayMetrics metrics = new DisplayMetrics(); 
     getWindowManager().getDefaultDisplay().getMetrics(metrics); 

     viewPager = (ViewPager) findViewById(R.id.view_pager); 
//  home= (ImageButton) findViewById(R.id.home_icon); 
//  file= (ImageButton) findViewById(R.id.folder_icon); 
//  spanner=(ImageButton) findViewById(R.id.spanner_icon); 
//  info=(ImageButton) findViewById(R.id.info_icon); 

     viewPager.setAdapter(new MyAdapter(getSupportFragmentManager())); 
     viewPager.setOnPageChangeListener(this); 

     /*gallery = (Gallery) findViewById(R.id.gallery); 

     // set gallery to left side 
     MarginLayoutParams mlp = (MarginLayoutParams) gallery.getLayoutParams(); 
     mlp.setMargins(-(metrics.widthPixels/2 + (142/2)), mlp.topMargin, 
        mlp.rightMargin, mlp.bottomMargin); 

     gallery.setSelection(1); 
     gallery.setAdapter(new ImageAdapter()); 
     gallery.setOnItemSelectedListener(this);  
     */ 
     handler = new Handler(); 

    } 

    // gallery item selected 
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 
     updateUI(i); 
    } 

    // view pager item selected 
    public void onPageSelected(int i) { 

     updateUI(i); 
    } 

    private void updateUI(final int i) { 
     viewPager.setCurrentItem(i); 
    } 

    public void onNothingSelected(AdapterView<?> adapterView) { } 

    public void onPageScrolled(int i, float v, int i1) { } 

    public void onPageScrollStateChanged(int i) { } 

    public class ImageAdapter extends BaseAdapter { 

     public int getCount() { 
      return mImageIds.length; 
     } 

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

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

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

      ImageView imageView = new ImageView(DemoPhotoAlbumActivity.this); 

      imageView.setImageResource(mImageIds[position]); 
      imageView.setLayoutParams(new Gallery.LayoutParams(150, 100)); 
      imageView.setScaleType(ImageView.ScaleType.FIT_XY); 

      return imageView; 
     } 
    } 

    public class MyAdapter extends FragmentPagerAdapter { 
     public MyAdapter(FragmentManager fm) { 
      super(fm); 
     } 

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

     @SuppressLint("ValidFragment") 
     @Override 
     public Fragment getItem(final int position) { 
      return new Fragment() { 
       @Override 
       public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
        ImageView imageView = new ImageView(DemoPhotoAlbumActivity.this); 
        //imageView.setImageResource(mImageIds[position]); 
        imageView.setBackgroundResource(mImageIds[position]); 
        return imageView; 
       } 
      }; 
     } 
    } 


} 

и макет будет

<?xml version="1.0" encoding="utf-8"?> 

<FrameLayout android:layout_height="fill_parent" 
      android:layout_width="fill_parent" 

     > 
    <android.support.v4.view.ViewPager 
     android:id="@+id/view_pager" 
     android:layout_height="fill_parent" 
     android:layout_width="fill_parent" 

      />   
</FrameLayout> 

Следуйте за этим, просто изменить имя изображения.

+0

Мне нужна вертикальная прокрутка :( – Aerrow

+0

ОК, я расскажу вам часть модификации. –

+0

да, plz, большое спасибо. необходимо выполнить это как можно скорее :( – Aerrow

0

Вы можете установить высоту и ширину своего списка так же, как высота и ширина изображений, которые вы загружаете, это может показывать только одно изображение за раз.

Смежные вопросы