简体   繁体   中英

Adding Textviews to ViewPager present in a ListView but the textviews are not visible

Layout of the row of list view:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent" android:id="@+id/linearLayout_template3">
<TextView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    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_width="match_parent"
        android:layout_height="200dp"
        android:orientation ="horizontal" />

</LinearLayout>

ListView Adapter:

Here I am using Holder class to save the Tag information of convertView. and also giving a unique ID to viewPager.I basically intend to show Images in ViewPager but to test the code I am working with 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 class:

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);
    }
}

Template3_imageview.xml:

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

Output: 在此处输入图片说明

SO the output shows the textview added in the ArrayAdapter's getView() method :

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

but doesn't show the one in the ViewPager Adapter:

 textView.setText("test");

Please help.

PS: I intend to add images finally but i was testing if textviews are getting added in pager or not.So you will see some extra code in the post.

The error was in isViewFromObject() method. I changed this

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

to

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

and it worked!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM