2014-01-09 3 views
3

Хороший день Разработчики, я уже реализую listview с помощью базового адаптера, и теперь я хочу добавить пейджер представления в элемент списка listview, в настоящее время в строке 2, но я столкнулся с ошибкой. Я думаю, речь идет о MeasureSpec в списке.Как добавить ViewPager, содержащий изображения в список?

Это ListView адаптер с помощью BaseAdapter:

public class ListViewAdapter extends BaseAdapter { 
    ... 
    @Override 
    public View getView(int pos, View convertView, ViewGroup parent) { 
     View v = convertView; 
     TextView txt_urutan; 
     TextView txt_menu; 
     TextView txt_price; 
     ImageView img_menu; 
     ImageView img_arrow; 

     if(v==null){ 
     inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = inflater.inflate(R.layout.list_makanan, parent, false); 
     } 
     img_menu = (ImageView)v.findViewById(R.id.picture_menu_on_listview); 
     txt_urutan = (TextView)v.findViewById(R.id.urutan_makanan_ayam_listview); 
     txt_menu = (TextView)v.findViewById(R.id.nama_makanan_ayam_listview); 
     txt_price = (TextView)v.findViewById(R.id.harga_makanan_ayam_listview); 
     img_arrow = (ImageView)v.findViewById(R.id.arrow_on_listview); 

     txt_urutan.setText(urutan_makanan_sambal[pos]); 
     txt_menu.setText(jenis_menu_sambal[pos]); 
     txt_price.setText(price_menu_sambal[pos]); 
     img_menu.setImageResource(pic_menu.getResourceId(pos, -1)); 
     img_arrow.setImageResource(R.drawable.nav_icon); 

     return v; 
    } 
} 

EDIT:

Это horizontalscrollview.java:

public class HorizontalScrollViewAdapter extends BaseAdapter{ 
LayoutInflater inflater; 
    Context context; 

    @Override 
    public int getCount() { 
     return 0; 
    } 

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

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

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View v = convertView; 
     ImageView img; 
     if(v==null){ 
      inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = inflater.inflate(R.layout.horizontal_scroll_view, parent, false); 
     } 
     img = (ImageView)v.findViewById(R.id.image_view1); 
     return v; 
    } 
} 

это siteContentView класс:

public class SiteContentPreview{ 
    public View getView(Context context, View v, SiteContentData siteContent){ 
     View result = v; 
     if(result!=null){ 
      LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      result = inflater.inflate(R.layout.custom_image, null); 
     } 
     TextView siteNumber = (TextView)result.findViewById(R.id.custom_image_view_text); 
     ImageView siteImage = (ImageView)result.findViewById(R.id.custom_image_view); 
     if(siteContent != null){ 
      siteNumber.setText(siteContent.getSiteNumber()); 
      siteImage.setImageResource(Integer.parseInt(siteContent.getSiteContentFrame())); 
     } 
     return result; 
    } 
} 

это siteContentData класс:

public class SiteContentData{ 
    String holdString; 
    String holdImagePath; 

    public getSiteNumber(){ 
     return holdString; 
    } 

    public getSiteContentFrame(){ 
     return holdImagePath; 
    } 
} 

Это horizontal_scroll_view.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 

<HorizontalScrollView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_marginTop="50dp" > 

    <LinearLayout 
     android:id="@+id/hori_place_holder" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="horizontal" > 
    </LinearLayout> 
</HorizontalScrollView> 

</LinearLayout> 

и это scroll_view.xml (для хранения изображений, которые должны быть размещены внутри горизонтальной прокрутки зрения):

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:orientation="vertical" > 

<ImageView android:id="@+id/image_view1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/sambal_bajak_laut"/> 

<ImageView android:id="@+id/image_view2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/sambal_bawang"/> 
</LinearLayout> 

любая помощь или идея были бы очень оценены. Окружающая среда: Eclipse, ADT, Genymotion.

+0

есть ли кто может помочь? – Hendy

+0

Посмотрите эту ссылку. Возможно, будет какая-то помощь http://stackoverflow.com/questions/14920459/placing-viewpager-as-a-row-in-listview –

+2

** Всегда ** при отправке stacktrace выделите строку, где исключение (строка '402' в методе' getView() 'вашего адаптера). – Luksprog

ответ

1

Вы можете сделать обходной путь.

Вместо добавления ViewPager вы просто добавляете View, расширенный BaseAdapter.

Там вы добавляете вид с HorizontallScroll. Событие Click вы можете запускать с идентификатором соответствующего представления.

В этом примере вы видите, как реализовать: горизонтально раст http://examples.javacodegeeks.com/android/core/ui/horizontalscrollview/android-horizontalscrollview-example/

Пожалуйста, обратите внимание, что вы должны установить ширину вашего ребенка (в вашем случае изображение) для match_parent. Используйте макет (который имеет match_parent), и в этом макете вы помещаете свое изображение с помощью wrap_content, так как не растягиваете изображение.

EDIT 1:

Сначала вы создаете свой HorizontalScrollView Layout, как следующее:

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" > 

    <HorizontalScrollView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_marginTop="50dp" > 

     <LinearLayout 
      android:id="@+id/hori_place_holder" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="horizontal" > 
     </LinearLayout> 
    </HorizontalScrollView> 
</LinearLayout> 

Теперь вы создаете AdapterView для вашего макета, который вы хотите поместить в LinearLayout

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/yourimage" /> 

</LinearLayout> 

Теперь в вашем коде вы динамически создаете и добавляете AdapterView (например, у вас есть) в Linringayout из ваш HorizontalScrollView.

EDIT 2

public class HorizontalScrollViewAdapter extends BaseAdapter { 
     ... 
     @Override 
     public View getView(int pos, View convertView, ViewGroup parent) { 
      View v = convertView; 
      ImageView img_menu; 
      if(v==null){ 
      inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = inflater.inflate(R.layout.horiscvi, parent, false); 
      } 
      // at this you must add your CustomeViewLayout 
      return v; 
     } 
    } 

И адаптер для CustomeView

public class CustomeViewAdapter extends BaseAdapter { 
    ... 
    @Override 
    public View getView(int pos, View convertView, ViewGroup parent) { 
     View v = convertView; 
     ImageView img_menu; 
     if(v==null){ 
     inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = inflater.inflate(R.layout.list_makanan, parent, false); 
     } 
     img_menu = (ImageView)v.findViewById(R.id.picture_menu_on_listview); 
     v.addView(img_menu); 
     return v; 
    } 
} 

EDIT 3

ОК, теперь в вашем AdapterView у вас есть раздел тот смотрит, как следующее :

ArrayList<SiteContentData> siteContentData = new ArrayList<SiteContentData>(); 
     siteContentData.add(new SiteContentData("one", "yourpicone")); 
     siteContentData.add(new SiteContentData("two", "yourpictwo")); 
     siteContentData.add(new SiteContentData("three", "yourpicthree")); 
     siteContentData.add(new SiteContentData("four", "yourpicfour")); 

     horizontalScrollView = ((HorizontalScrollView) findViewById(R.id.horizontalScrollView1)); 
     sitePreview = ((LinearLayout) findViewById(R.id.hori_linear)); 

     for (SiteContentData siteContData : siteContentData) 
     { 
      View convertView; 
      LayoutInflater inflaterCustomeShow = 
        (LayoutInflater) getApplicationContext().getSystemService(
          Context.LAYOUT_INFLATER_SERVICE); 
      convertView = inflaterCustomeShow.inflate(R.layout.customeimage, null); 
      View sitePreviewView = 
        SiteContentPreview.getView(getApplicationContext(), convertView, siteContData); 

      sitePreview.addView(sitePreviewView); 
     } 

В этом случае вы инициализируете свой scrollview линейным вылетом внутри этого. Специально вы добавляете CustomeView внутри linearlayout. SiteContentData - это просто pojo, который содержит две строки, первый - это образец текста, а второй - путь к изображению в вашем проекте.

И SiteContentPreview выглядит следующим образом:

public class SiteContentPreview 
{ 
    public static View getView(Context context, View convertView, SiteContentData siteContent) 
    { 
     View result = convertView; 
     if (result == null) 
     { 
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      result = inflater.inflate(R.layout.customeimage, null); 
     } 

     TextView siteNumber = ((TextView) result.findViewById(R.id.custome_imageview_text)); 
     ImageButton siteImage = ((ImageButton) result.findViewById(R.id.custome_image_view)); 
     if (siteContent != null) 
     { 
      siteNumber.setText(siteContent.getSiteNumber()); 
      siteImage.setImageResource(Integer.parseInt(siteContent.getSiteContentFrame())); 
     } 

     return result; 
    } 
} 

только простое присвоение.

Это все.

HorizontalScrollView Layout вы правы, и вот макет для CustomeViewImage:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <ImageView 
     android:id="@+id/custome_image_view" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/ic_launcher" /> 

    <TextView 
     android:id="@+id/custome_imageview_text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="TextView" /> 

</LinearLayout> 

Это все. наслаждаться. Надеюсь, вы достигнете того, чего хотите.

public class SiteContentData 
{ 
private String siteNumber; 
private String siteContentFrame; 

public SiteContentData(String siteNumber, String siteContentFrame) 
{ 
this.siteNumber = siteNumber; 
this.siteContentFrame = siteContentFrame; 
} 

public String getSiteNumber() 
{ 
return siteNumber; 
} 

public String getSiteContentFrame() 
{ 
return siteContentFrame; 
} 

} 
+0

Я пытаюсь реализовать горизонтальный вид прокрутки, но я все еще запутался в том, как раздувать макет, заполняющий горизонтальный вид прокрутки, с моим макетом, который содержит расширенный базовый адаптер listview. можете ли вы дать мне пример того, как достичь вышеуказанного представления, используя горизонтальный вид прокрутки? – Hendy

+0

См. Мой ответ «Редактировать». Не стесняйтесь спрашивать больше. –

+0

Я уже создаю 2 xml для горизонтальной прокрутки, вид и расположение макета, которые содержат изображение. теперь я должен раздувать эти 2 xml внутри моего ListViewAdapter? или я должен создать другой класс, который расширяет AdapterView? – Hendy

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