我正在使用带有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;
}
}
以上结果只显示了文本视图。
答案 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