You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android ViewPager现有代码中添加显示另一个TextView?

如何在ViewPager页面中显示多个TextView?

我正在使用ViewPager,当前仅能显示一个TextView,希望添加并显示另一个TextView。恳请帮忙,提前感谢。


你提供的现有代码:

MainActivity类

public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Set title for the GridView
        setTitle("GridView");
        // Get the view from grid_view.xml
        setContentView(R.layout.grid_view);
        // Set the images from ImageAdapter.java to GridView
        GridView gridview = (GridView) findViewById(R.id.gridview);
        //gridview.setAdapter(new ImageAdapter(this)); //commented line 05052018
        gridview.setAdapter(new ChangesofAdapter(this)); //new line 05052018
        // Listening to GridView item click
        gridview.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                // Launch ImageViewPager.java on selecting GridView Item
                Intent i = new Intent(getApplicationContext(), ImageViewPager.class);
                // Show a simple toast message for the item position
                Toast.makeText(MainActivity.this, "" + position, Toast.LENGTH_SHORT).show();
                // Send the click position to ImageViewPager.java using intent
                i.putExtra("id", position);
                // Start ImageViewPager
                startActivity(i);
            }
        });
    }
}

ChangesofAdapter类

public class ChangesofAdapter extends BaseAdapter {
    private Context mContext;

    public ChangesofAdapter(Context c) {
        mContext = c;
    }

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

    public Object getItem(int position) {
        return getDataContacts()[position];
    }

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

    public View getView(int position, View convertView, ViewGroup parent) {
        TextView imageView;
        if (convertView == null) {
            // If it's not recycled, initialize some attributes
            imageView = new TextView(mContext.getApplicationContext());
            imageView.setTextColor(Color.GREEN);
            imageView.setGravity(Gravity.LEFT); // new line 05052018
            imageView.setTextSize(30);
        } else {
            imageView = (TextView) convertView;
        }
        String abc =getDataContacts()[position];
        imageView.setText(abc); // new line 05052018
        return imageView;
    }

    public String[] getContacts(){
        DBUtils utils = new DBUtils(mContext.getApplicationContext());
        ArrayList<String> names = new ArrayList<String>();
        new DBUtils((mContext.getApplicationContext()));
        try {
            DBUtils.createDatabase();
        } catch (IOException e) {
            Log.w(" Create Db "+e.toString(),"===");
        }
        DBUtils.openDatabase();
        Cursor cursor = utils.getResult("select * from Cflviewpagerdata order by title");
        cursor.moveToFirst();
        while(!cursor.isAfterLast()) {
            names.add(cursor.getString(cursor.getColumnIndex("view")));
            cursor.moveToNext();
        }
        cursor.close();
        DBUtils.closeDataBase();
        return names.toArray(new String[names.size()]);
    }

    public String[] getDataContacts(){
        DBUtils utils = new DBUtils(mContext.getApplicationContext());
        ArrayList<String> names = new ArrayList<String>();
        new DBUtils((mContext.getApplicationContext()));
        try {
            DBUtils.createDatabase();
        } catch (IOException e) {
            Log.w(" Create Db "+e.toString(),"===");
        }
        DBUtils.openDatabase();
        Cursor cursor = utils.getResult("select * from Cflviewpagerdata order by title");
        cursor.moveToFirst();
        while(!cursor.isAfterLast()) {
            names.add(cursor.getString(cursor.getColumnIndex("title")));
            cursor.moveToNext();
        }
        cursor.close();
        DBUtils.closeDataBase();
        return names.toArray(new String[names.size()]);
    }
}

ImageViewPager类(片段)

public class ImageViewPager extends Activity implements OnInitListener {
    // Declare Variable
    int position;
    Bundle img = new Bundle();
    ViewPager vp;
    private TextToSpeech mTts;
    List<TextView> images;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Set title for the ViewPager
        setTitle("ViewPager");
        // Get the view from view_pager.xml
        setContentView(R.layout.view_pager);
        mTts = new TextToSpeech(this, this);
        // Retrieve data from MainActivity on item click event
        Intent p = getIntent();
        position = p.getExtras().getInt("id");
        ChangesofAdapter imageAdapter = new ChangesofAdapter(this); //new line 05052018
        images = new ArrayList<TextView>(); //new line 05052018
        // Retrieve all the images
        for (int i = 0; i < imageAdapter.getCount(); i++) {
            TextView imageView = new TextView(this); //new line 05052018
            String abc = imageAdapter.getContacts()[i];
            imageView.setText(imageAdapter.getContacts()[i]); //new line 05052018
            imageView.setTextColor(Color.BLUE);
            imageView.setGravity(Gravity.CENTER_HORIZONTAL);//new line 05052018
            img.putString("CURRENT_POSITION", abc);
            images.add(imageView);
        }
        vp=(ViewPager)fin

解决方案:通过自定义布局和PagerAdapter实现多TextView显示

原来的代码中,每个ViewPager页面只创建了单个TextView,所以只能显示一个内容。我们可以通过以下步骤实现多TextView展示:

1. 创建包含两个TextView的页面布局

在res/layout目录下新建item_viewpager.xml,作为ViewPager每个页面的模板:

<?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"
    android:padding="16dp">

    <!-- 第一个TextView:显示标题 -->
    <TextView
        android:id="@+id/tv_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        android:textColor="#0000FF"
        android:gravity="center_horizontal"/>

    <!-- 第二个TextView:显示内容 -->
    <TextView
        android:id="@+id/tv_content"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="20sp"
        android:textColor="#008000"
        android:layout_marginTop="16dp"/>

</LinearLayout>

2. 自定义ViewPager的适配器

创建MyPagerAdapter类,负责加载布局并绑定数据:

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.viewpager.widget.PagerAdapter;

import java.util.List;

public class MyPagerAdapter extends PagerAdapter {
    private Context mContext;
    private List<String> mTitleList; // 标题数据
    private List<String> mContentList; // 内容数据

    public MyPagerAdapter(Context context, List<String> titleList, List<String> contentList) {
        mContext = context;
        mTitleList = titleList;
        mContentList = contentList;
    }

    @Override
    public int getCount() {
        return mTitleList.size(); // 返回页面总数
    }

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

    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
        // 加载布局文件
        LayoutInflater inflater = LayoutInflater.from(mContext);
        View pageView = inflater.inflate(R.layout.item_viewpager, container, false);

        // 获取两个TextView并设置对应数据
        TextView tvTitle = pageView.findViewById(R.id.tv_title);
        TextView tvContent = pageView.findViewById(R.id.tv_content);

        tvTitle.setText(mTitleList.get(position));
        tvContent.setText(mContentList.get(position));

        // 将页面添加到ViewPager容器
        container.addView(pageView);
        return pageView;
    }

    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        // 移除页面,避免内存泄漏
        container.removeView((View) object);
    }
}

3. 修改ImageViewPager类的代码

替换原来的TextView列表逻辑,改用自定义适配器:

import android.content.Intent;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.widget.ViewPager;

import androidx.appcompat.app.AppCompatActivity;

import java.util.Arrays;
import java.util.List;

public class ImageViewPager extends AppCompatActivity implements TextToSpeech.OnInitListener {
    int position;
    ViewPager vp;
    private TextToSpeech mTts;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setTitle("ViewPager");
        setContentView(R.layout.view_pager);
        mTts = new TextToSpeech(this, this);

        // 获取从MainActivity传递过来的位置
        Intent p = getIntent();
        position = p.getExtras().getInt("id");

        // 获取数据
        ChangesofAdapter dataAdapter = new ChangesofAdapter(this);
        List<String> titleList = Arrays.asList(dataAdapter.getDataContacts());
        List<String> contentList = Arrays.asList(dataAdapter.getContacts());

        // 初始化ViewPager并设置适配器
        vp = findViewById(R.id.viewpager); // 确保你的view_pager.xml里有这个id
        MyPagerAdapter pagerAdapter = new MyPagerAdapter(this, titleList, contentList);
        vp.setAdapter(pagerAdapter);
        // 设置默认显示选中的页面
        vp.setCurrentItem(position);
    }

    @Override
    public void onInit(int status) {
        // 保留你原来的TTS初始化逻辑
    }

    @Override
    protected void onDestroy() {
        // 释放TTS资源
        if (mTts != null) {
            mTts.stop();
            mTts.shutdown();
        }
        super.onDestroy();
    }
}

4. 优化ChangesofAdapter(可选)

把返回数组的方法改成返回List,减少代码冗余:

import android.content.Context;
import android.database.Cursor;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class ChangesofAdapter extends BaseAdapter {
    private Context mContext;

    public ChangesofAdapter(Context c) {
        mContext = c;
    }

    @Override
    public int getCount() {
        return getDataContactsList().size();
    }

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        TextView textView;
        if (convertView == null) {
            textView = new TextView(mContext);
            textView.setTextColor(android.graphics.Color.GREEN);
            textView.setGravity(android.view.Gravity.LEFT);
            textView.setTextSize(30);
        } else {
            textView = (TextView) convertView;
        }
        textView.setText(getDataContactsList().get(position));
        return textView;
    }

    public List<String> getContactsList(){
        DBUtils utils = new DBUtils(mContext);
        ArrayList<String> names = new ArrayList<>();
        try {
            DBUtils.createDatabase();
        } catch (IOException e) {
            Log.w("Create Db", e.toString());
        }
        DBUtils.openDatabase();
        Cursor cursor = utils.getResult("select * from Cflviewpagerdata order by title");
        if (cursor.moveToFirst()) {
            do {
                names.add(cursor.getString(cursor.getColumnIndex("view")));
            } while (cursor.moveToNext());
        }
        cursor.close();
        DBUtils.closeDataBase();
        return names;
    }

    public List<String> getDataContactsList(){
        DBUtils utils = new DBUtils(mContext);
        ArrayList<String> names = new ArrayList<>();
        try {
            DBUtils.createDatabase();
        } catch (IOException e) {
            Log.w("Create Db", e.toString());
        }
        DBUtils.openDatabase();
        Cursor cursor = utils.getResult("select * from Cflviewpagerdata order by title");
        if (cursor.moveToFirst()) {
            do {
                names.add(cursor.getString(cursor.getColumnIndex("title")));
            } while (cursor.moveToNext());
        }
        cursor.close();
        DBUtils.closeDataBase();
        return names;
    }

    // 保留原来的数组方法,兼容旧代码(如果需要的话)
    public String[] getContacts(){
        return getContactsList().toArray(new String[0]);
    }

    public String[] getDataContacts(){
        return getDataContactsList().toArray(new String[0]);
    }
}

这样修改后,ViewPager的每个页面都会显示两个TextView,分别展示你的title和view字段的数据啦!

内容的提问来源于stack exchange,提问作者user2454588

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:36:04