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
我正在使用带有 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