嗨,我想将视图寻呼机添加到现有代码中。添加的最佳方法是什么。这是我的RssTabActivitty.java和RssChannelActivity.java。
RssTabActivity 是我初始化选项卡的主要活动。RssChannelActivity 是加载 rss feed。
这是完整的源代码https://github.com/itcuties/Android-Multicategory-RSS-Reader
public class RssTabsActivity extends TabActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// First, set the content view
setContentView(R.layout.activity_rss_tabs);
// Then get the TabHost
TabHost tabHost = getTabHost();
/* *****************
* Art tab
*/
Intent artIntent = new Intent().setClass(this, RssChannelActivity.class);
// Set Art category RSS URL
artIntent.putExtra("rss-url", "http://feeds.reuters.com/news/artsculture?format=xml");
// The name of the art tab taken from the String resources
String artTabName = getResources().getString(R.string.tab_art);
TabSpec artTabSpec = tabHost.newTabSpec(artTabName)
.setIndicator(artTabName, getResources().getDrawable(R.drawable.rss_tab_art))
.setContent(artIntent);
// Add art tab to the TabHost
tabHost.addTab(artTabSpec);
/* *****************
* Tech tab
*/
Intent techIntent = new Intent().setClass(this, RssChannelActivity.class);
// Set Tech category RSS URL
techIntent.putExtra("rss-url", "http://feeds.reuters.com/reuters/technologyNews?format=xml");
// Tech tab name taken from the string resources
String techTabName = getResources().getString(R.string.tab_tech);
TabSpec techTabSpec = tabHost.newTabSpec(techTabName)
.setIndicator(techTabName, getResources().getDrawable(R.drawable.rss_tab_tech))
.setContent(techIntent);
// Add tech tab to the TabHost
tabHost.addTab(techTabSpec);
/* *****************
* Sports tab
*/
Intent sportsIntent = new Intent().setClass(this, RssChannelActivity.class);
// Set Sports category RSS URL
sportsIntent.putExtra("rss-url", "http://feeds.reuters.com/reuters/sportsNews?format=xml");
// Sports tab name - string resources
String sportsTabName = getResources().getString(R.string.tab_sports);
TabSpec sportsTabSpec = tabHost.newTabSpec(sportsTabName)
.setIndicator(sportsTabName, getResources().getDrawable(R.drawable.rss_tab_sports))
.setContent(sportsIntent);
// Add sports tab to the TabHost
tabHost.addTab(sportsTabSpec);
// Set current tab to Technology
tabHost.setCurrentTab(1);
}
}
public class RssChannelActivity extends Activity {
// A reference to this activity
private RssChannelActivity local;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rss_channel);
// Get the RSS URL that was set in the RssTabActivity
String rssUrl = (String)getIntent().getExtras().get("rss-url");
// Set reference to this activity
local = this;
GetRSSDataTask task = new GetRSSDataTask();
// Start process RSS task
task.execute(rssUrl);
}
/**
* This class downloads and parses RSS Channel feed.
*
* @author itcuties
*
*/
private class GetRSSDataTask extends AsyncTask<String, Void, List<RssItem> > {
@Override
protected List<RssItem> doInBackground(String... urls) {
try {
// Create RSS reader
RssReader rssReader = new RssReader(urls[0]);
// Parse RSS, get items
return rssReader.getItems();
} catch (Exception e) {
Log.e("RssChannelActivity", e.getMessage());
}
return null;
}
@Override
protected void onPostExecute(List<RssItem> result) {
// Get a ListView from the RSS Channel view
ListView itcItems = (ListView) findViewById(R.id.rssChannelListView);
// Create a list adapter
ArrayAdapter<RssItem> adapter = new ArrayAdapter<RssItem>(local,android.R.layout.simple_list_item_1, result);
// Set list adapter for the ListView
itcItems.setAdapter(adapter);
// Set list view item click listener
itcItems.setOnItemClickListener(new ListListener(result, local));
}
}
}
要向活动添加视图寻呼机,请执行以下操作:
-
将 ViewPager 资源添加到活动资源:
<android.support.v4.view.PagerTitleStrip android:id="@+id/pager_title_strip" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="top" android:background="#33b5e5" android:paddingBottom="4dp" android:paddingTop="4dp" android:textColor="#fff" />
-
创建寻呼机的片段资源:
<TextView android:id="@+id/section_label" android:layout_width="wrap_content" android:layout_height="wrap_content" />
-
创建片段的片段类:
公共静态类 DummySectionFragment 扩展 Fragment { /** * 表示此部分编号的片段参数 *片段。 */ 公共静态最终字符串ARG_SECTION_NUMBER = "section_number";
public DummySectionFragment() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_main_dummy, container, false); TextView dummyTextView = (TextView) rootView .findViewById(R.id.section_label); dummyTextView.setText(Integer.toString(getArguments().getInt( ARG_SECTION_NUMBER))); return rootView; } }
-
创建寻呼机的适配器类:
public class SectionPagerAdapter extensions FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { // getItem is called to instantiate the fragment for the given page. // Return a DummySectionFragment (defined as a static inner class // below) with the page number as its lone argument. Fragment fragment = new DummySectionFragment(); Bundle args = new Bundle(); args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, position + 1); fragment.setArguments(args); return fragment; } @Override public int getCount() { // Show 3 total pages. return 3; } @Override public CharSequence getPageTitle(int position) { Locale l = Locale.getDefault(); switch (position) { case 0: return getString(R.string.title_section1).toUpperCase(l); case 1: return getString(R.string.title_section2).toUpperCase(l); case 2: return getString(R.string.title_section3).toUpperCase(l); } return null; } }
-
在您的活动中使用寻呼机(您的活动必须扩展片段活动):
SectionPagerAdaptermSectionPagerAdapter;ViewPager mViewPager;mSectionPagerAdapter = new SectionPagerAdapter(getSupportFragmentManager());使用部分适配器设置视图寻呼器。mViewPager = (ViewPager) findViewById(R.id.pager);mViewPager.setAdapter(mSectionPagerAdapter);