将 Textviews 添加到 ListView 中存在的 ViewPager 但 textviews 不可见

Posted

技术标签:

【中文标题】将 Textviews 添加到 ListView 中存在的 ViewPager 但 textviews 不可见【英文标题】:Adding Textviews to ViewPager present in a ListView but the textviews are not visible 【发布时间】:2015-10-24 12:05:38 【问题描述】:

列表视图行的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_
    android:layout_ android:id="@+id/linearLayout_template3">
<TextView
    android:layout_
    android:layout_
    android:id="@+id/template3_textView"/>

    <android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/pager"
        android:layout_
        android:layout_
        android:orientation ="horizontal" />

</LinearLayout>

ListView 适配器:

这里我使用Holder类来保存convertView的Tag信息。 并且还为 viewPager 提供了一个唯一的 ID。我基本上打算在 ViewPager 中显示图像,但要测试我正在使用 TextViews 的代码。

public class ListViewAdapter extends ArrayAdapter<ParsedItems> 

    LinearLayout mainLinnerLayout;
    ViewPagerAdapter pagerAdapter;
    Context context;
    ArrayList<ParsedItems> mObject;
    ViewPagerAdapter adapter;
    private ProgressDialog progressDialog;
    public ListViewAdapter(Context context,int resource, ArrayList<ParsedItems> objects) 
        super(context,resource,objects);
        this.context = context;
        this.mObject = objects;
    

    @Override
    public View getView(int position, View convertView, ViewGroup parent) 
        Holder holder=null;
        ParsedItems items = mObject.get(position);
        String template = items.getTemplate();
        ParsedItemsImage mInnerItem;
        ArrayList<ParsedItemsImage> mInnerItems = items.getItems();
        LinearLayout innerLinearLayout=null;
        if((Holder)convertView.getTag() == null)
            LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.row_layout_template3, parent,false);
            ViewPager viewPager = (ViewPager)convertView.findViewById(R.id.pager);
            holder = new Holder();
            holder.viewPager = viewPager;
            holder.viewPager.setId(NotificationID.getID());
            holder.textView = (TextView)convertView.findViewById(R.id.template3_textView);
            convertView.setTag(holder);
            else
            
                holder = (Holder)convertView.getTag();
            
            holder.textView.setText("oyi!");
            pagerAdapter = new ViewPagerAdapter(mInnerItems,context,convertView);
            holder.viewPager.setAdapter(pagerAdapter);
        return convertView;
    

    class Holder
    
        TextView textView;
        ViewPager viewPager;
    

ViewPagerAdapter 类:

public class ViewPagerAdapter extends PagerAdapter 
    ArrayList<ParsedItemsImage> mInnerItems;
    Context context;
    private final WeakReference<View> ref;
    public ViewPagerAdapter(ArrayList<ParsedItemsImage> items,Context context, View view)
    
     mInnerItems = new ArrayList<ParsedItemsImage>(items);
        this.context = context;
        ref = new WeakReference<View>(view);
    
    @Override
    public int getCount() 
        //return mInnerItems.size();
        return 6;
    

    @Override
    public boolean isViewFromObject(View view, Object o) 
        return false;
    

    @Override
    public Object instantiateItem(ViewGroup container, int position) 
        View collection;
        ParsedItemsImage mParsedItemsImage = mInnerItems.get(position);
        String url=mParsedItemsImage.getImage();
        LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        collection = inflater.inflate(R.layout.template3_imageview,container,false);
        TextView textView = (TextView)collection.findViewById(R.id.text_temp3);
        ViewPager vp = (ViewPager)container;
        textView.setText("test");
        vp.addView(collection);
        return textView;

    

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) 
        container.removeView((TextView) object);
    

模板3_imageview.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_
    android:layout_>
    <TextView
        android:layout_
        android:layout_
        android:id="@+id/text_temp3"/>
    <ImageView
        android:layout_
        android:layout_
        android:id="@+id/imageView_template3"/>
</LinearLayout>

输出:

所以输出显示了在 ArrayAdapter 的 getView() 方法中添加的文本视图:

  holder.textView.setText("oyi!");

但在 ViewPager 适配器中没有显示:

 textView.setText("test");

请帮忙。

P.S.:我打算最后添加图像,但我正在测试是否在寻呼机中添加了文本视图。所以你会在帖子中看到一些额外的代码。

【问题讨论】:

尝试将 List 项的 TextView 高度设置为 wrap_content。很难从所有代码中分辨出来,但看起来您的 ViewPager 根本没有在屏幕上提供任何空间。 【参考方案1】:

错误出现在 isViewFromObject() 方法中。我改变了这个

@Override
public boolean isViewFromObject(View view, Object o) 
    return false;

@Override
public boolean isViewFromObject(View view, Object o) 
    return view == o;

它成功了!

【讨论】:

以上是关于将 Textviews 添加到 ListView 中存在的 ViewPager 但 textviews 不可见的主要内容,如果未能解决你的问题,请参考以下文章

将LinearLayout添加到ConstraintLayout时,TextViews消失

调用 ListView.addHeaderView() 时出现 ClassCastException?

将 CheckBox 添加到列表行会丢失我的 onItemClick 事件?

ListView 中的可见性消失

在 UIImage 上添加 TextViews - Swift - 以编程方式

传递listview数组字符串以查看另一个活动中的文本