我實際上無法定義問題,這就是爲什麼問題是這樣的。Android - 關於TTS和其他東西
作爲一個團隊,我們正在製作一個使用網站RSS的新聞應用程序,並且我的工作是爲項目添加文本到語音選項以便只讀取新聞標題。代碼如下。我們正在使用TabActivity。
問題是我不能採取精確的數據。例如,當你在「日報」選項卡,它開始閱讀「運動」標籤這是一個後,它開始閱讀之前等標籤的一些其他選項卡
MainActivity
public class MainActivity extends AppCompatActivity implements NewsResultListener {
private SectionsPagerAdapter mSectionsPagerAdapter;
private ViewPager mViewPager;
private Speaker speakerManager;
private ArrayList<News> titleListStable = new ArrayList<>();
private static ArrayList<News> titleList = new ArrayList<>();
private static ArrayList<ArrayList<News>> newsList = new ArrayList<>();
private int selectedPage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
speakerManager = new Speaker(this);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
// Create the adapter that will return a fragment for each of the three
// primary sections of the activity.
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
// Set up the ViewPager with the sections adapter.
mViewPager = (ViewPager) findViewById(R.id.container);
mViewPager.setAdapter(mSectionsPagerAdapter);
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
titleListStable = titleList;
Toast.makeText(getApplicationContext(), "" + position , Toast.LENGTH_LONG).show();
selectedPage = position;
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(mViewPager);
}
@Override
protected void onDestroy() {
super.onDestroy();
if(speakerManager != null)
{
speakerManager.shutdown();
}
}
@Override
public void onSuccess(ArrayList<News> news) {
}
@Override
public void onFail() {
}
/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment implements NewsResultListener {
/**
* The fragment argument representing the section number for this
* fragment.
*/
private static final String ARG_SECTION_NUMBER = "section_number";
private RecyclerView rvNews;
private RecyclerView.Adapter adapter;
private RecyclerView.LayoutManager mLayoutManager;
private ArrayList<News> dataset;
public PlaceholderFragment() {
}
/**
* Returns a new instance of this fragment for the given section
* number.
*/
public static PlaceholderFragment newInstance(int sectionNumber) {
PlaceholderFragment fragment = new PlaceholderFragment();
Bundle args = new Bundle();
args.putInt(ARG_SECTION_NUMBER, sectionNumber);
fragment.setArguments(args);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
rvNews = (RecyclerView) rootView.findViewById(R.id.rvNews);
mLayoutManager = new LinearLayoutManager(getContext());
rvNews.setLayoutManager(mLayoutManager);
dataset = new ArrayList<>();
adapter = new NewsAdapter(dataset, getActivity());
rvNews.setAdapter(adapter);
switch (getArguments().getInt(ARG_SECTION_NUMBER)) {
case 0:
new RssFeedParser(this).execute("guncel");
break;
case 1:
new RssFeedParser(this).execute("spor");
break;
case 2:
new RssFeedParser(this).execute("ekonomi");
break;
case 3:
new RssFeedParser(this).execute("turkiye");
break;
case 4:
new RssFeedParser(this).execute("dunya");
break;
case 5:
new RssFeedParser(this).execute("kultur-sanat");
break;
case 6:
new RssFeedParser(this).execute("politika");
break;
case 7:
new RssFeedParser(this).execute("bilim-teknoloji");
break;
case 8:
new RssFeedParser(this).execute("yasam");
break;
case 9:
new RssFeedParser(this).execute("saglik");
break;
case 10:
new RssFeedParser(this).execute("analiz-haber");
break;
case 11:
new RssFeedParser(this).execute("gunun-basliklari");
break;
}
//TextView textView = (TextView) rootView.findViewById(R.id.section_label);
//textView.setText(getString(R.string.section_format,));
return rootView;
}
@Override
public void onSuccess(ArrayList<News> news) {
for(News item : news)
{
dataset.add(item);
}
titleList=dataset;
newsList.add(dataset);
adapter.notifyDataSetChanged();
}
@Override
public void onFail() {
}
}
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return PlaceholderFragment.newInstance(position);
}
@Override
public int getCount() {
// Show 3 total pages.
return 12;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "GÜNCEL";
case 1:
return "SPOR";
case 2:
return "EKONOMİ";
case 3:
return "TÜRKİYE";
case 4:
return "DÜNYA";
case 5:
return "KÜLTÜR SANAT";
case 6:
return "POLİTİKA";
case 7:
return "BİLİM TEKNOLOJİ";
case 8:
return "YAŞAM";
case 9:
return "SAĞLIK";
case 10:
return "ANALİZ HABER";
case 11:
return "GÜNÜN BAŞLIKLARI";
}
return null;
}
}
public void imageButton(View v){
for(News i: titleListStable){
String title = i.getTitle();
speakerManager.speak(title);
}
}
}
音箱類
public class Speaker {
private TextToSpeech mTextToSpeech;
private boolean mIsTTSEnabled = true;
public Speaker(final MainActivity act){
mTextToSpeech = new TextToSpeech(act, new TextToSpeech.OnInitListener() {
@Override
public void onInit(int i) {
if(i == TextToSpeech.SUCCESS){
mTextToSpeech.setLanguage(new Locale("TR-tr"));
switch (mTextToSpeech.isLanguageAvailable(new Locale("TR-tr")))
{
case TextToSpeech.LANG_MISSING_DATA:
case TextToSpeech.LANG_NOT_SUPPORTED:
Toast.makeText(act, "Cihazda Türkçe konuşma sentezi desteklenmemektedir.", Toast.LENGTH_SHORT).show();
default:
break;
}
}else{
mIsTTSEnabled = false;
}
}
});
}
public void speak(final String announce){
if(mIsTTSEnabled){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
mTextToSpeech.speak(announce, TextToSpeech.QUEUE_ADD, null, "");
}
else
{
mTextToSpeech.speak(announce, TextToSpeech.QUEUE_FLUSH, null);
}
}
}
public void shutdown(){
if(mTextToSpeech != null)
{
mTextToSpeech.stop();
}
}
}
注:如果你想達到整個代碼,點擊; https://github.com/dnkilic/AnadoluAjansi
也許我無法表達自己,但我的問題不在於記憶。無論如何,謝謝你。解決方案的不同方法。 –
我向你解釋爲什麼當你在**每日**選項卡中時,爲什麼你的下一個選項** ** sports **加載。這是因爲ViewPager的默認行爲。檢查我的答案。 –
SO答案鏈接只是爲了深入解釋爲什麼少於1頁的限制是不允許的。 –