Android - 在SlidingTabLayout中显示内容

时间:2016-07-08 10:47:34

标签: android android-fragments imageview slidingmenu

我正在使用带有3个标签的slidingtablayout。我正在尝试在第一个标签中显示来自网址的图片。

我尝试在单个视图上加载图像,但效果很好。

这是我的第一个标签(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;

    }
}

以上结果只显示了文本视图。

2 个答案:

答案 0 :(得分:0)

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

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

你的AsyncTask也应该返回onDoInBackground中的位图,以便它作为onPostExcecute中的参数传入(你现在拥有的字符串)。

你说你有一个SlidingTabsLayout,但你的布局中没有SlidingTabsLayout,那么你怎么能有标签?

您的片段从不加载图像(这在FirstTab活动中完成)。这就是它从未出现过的原因。

答案 1 :(得分:0)

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

或者如果您需要带有图片的文字,则需要将此课程添加到您的活动

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