Android - 在 SlidingTabLayout 中显示内容

Android - Display content in SlidingTabLayout

我正在使用带有 3 个选项卡的滑动标签布局。我正在尝试在第一个选项卡中显示来自 url 的图像。

我尝试在单个视图中加载图片,效果很好。

这是我的第一个标签 (activity_first.xml) 的 xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=“myproject.FirstTab”>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="TEST LOADING IMAGE"
        android:id="@+id/textView"
        android:layout_marginTop="30dp"
        android:layout_centerHorizontal="true" />

    <ImageView
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:id="@+id/imageView"
        android:layout_below="@+id/textView"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="66dp" />

</RelativeLayout>

Java 第一个选项卡 (FirstTab.java):

public class FirstTab extends ActionBarActivity {
    Bitmap b;
    ImageView img;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);
        img = (ImageView) findViewById(R.id.imageView);
        information info = new information();
        info.execute("");
    }

    public class information extends AsyncTask<String, String, String> {

        @Override
        protected String doInBackground(String... arg0) {
            try {
                URL url = new URL("https://si.wsj.net/public/resources/images/BN-BY925_mag041_OZ_20140318165119.jpg");
                InputStream is = new BufferedInputStream(url.openStream());
                b = BitmapFactory.decodeStream(is);
            } catch (Exception e) {

            }
            return null;
        }

        @Override
        protected void onPostExecute(String result) {
            img.setImageBitmap(b);
        }
    }
}

这是我的片段 (LayoutInflater.java):

public class LayoutInflater extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View v =inflater.inflate(R.layout.activity_first,container,false);
        return v;

    }
}

上面的结果只是显示了textview。

我认为您应该返回文档并仔细阅读 Activity 和 Fragment 的工作原理。我说这是冒犯,而是因为你的代码中有很多错误,这让我怀疑你误解了一些核心概念。

首先,您在 Activity 中展开的布局(这就是您在 setContentView() 中所做的)并且您的片段已经包含 TextView 的文本。这就是显示文本的原因。

您的 AsyncTask 还应该 return onDoInBackground 中的位图,以便它作为参数传入 onPostExcecute(代替您现在拥有的字符串)。

你说你有一个SlidingTabsLayout,但是你的layout里面没有SlidingTabsLayout,怎么会有tabs呢?

您的片段永远不会加载图像(这是在 FirstTab activity 中完成的)。这就是它从未显示的原因。

请尝试 mTabLayout.getTabAt(0).setIcon(R.drawable.needed_icon)

或者如果您需要带图片的文字,您需要将此 class 添加到您的 Activity

public class SampleFragmentPagerAdapter extends FragmentPagerAdapter {
.............
@Override
public CharSequence getPageTitle(int position) {
        Drawable image = ContextCompat.getDrawable(context, imageResId[position]);
        image.setBounds(0, 0, image.getIntrinsicWidth(), image.getIntrinsicHeight());
        SpannableString sb = new SpannableString(" ");
        ImageSpan imageSpan = new ImageSpan(image, ImageSpan.ALIGN_BOTTOM);
        sb.setSpan(imageSpan, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        return sb;
    }
}

然后 ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager); viewPager.setAdapter(new SampleFragmentPagerAdapter(getSupportFragmentManager(), MainActivity.this));

详情:https://guides.codepath.com/android/Google-Play-Style-Tabs-using-TabLayout