Навигационный ящик и фрагмент
Я новичок в программировании на android, мой проект заключается в получении RSS-каналов из интернета ,он отлично работает, затем я переместил приложение в меню навигационного ящика.
Тогда приложение становится не работающим я уверен, что нет никакой ошибки в коде, но в том, как вызвать фрагмент, который делает работу "я думаю, что !". во всяком случае это мой код>>
моя основная деятельность:
public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { NavigationView navigationView=null; Toolbar toolbar=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); RssFragment fragment=new RssFragment(); android.support.v4.app.FragmentTransaction fragmentTransaction=getSupportFragmentManager().beginTransaction(); fragmentTransaction.replace(R.id.fragment_container,fragment); fragmentTransaction.commit(); toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); drawer.addDrawerListener(toggle); toggle.syncState(); navigationView = (NavigationView) findViewById(R.id.nav_view); navigationView.setNavigationItemSelectedListener(this); }
мой RssFragment:
public class RssFragment extends Fragment implements AdapterView.OnItemClickListener { private ProgressBar progressBar; private ListView listView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_rss, container, false); progressBar = (ProgressBar) view.findViewById(R.id.progressBar); listView = (ListView) view.findViewById(R.id.listView); listView.setOnItemClickListener(this); final SwipeRefreshLayout pullToRefresh = (SwipeRefreshLayout) view.findViewById(R.id.swipe_container); pullToRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { startService(); pullToRefresh.setRefreshing(false); } }); return view; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); startService(); } private void startService() { Intent intent = new Intent(getActivity(), RssService.class); getActivity().startService(intent); } /** * Once the {@link RssService} finishes its task, the result is sent to this BroadcastReceiver */ private BroadcastReceiver resultReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { progressBar.setVisibility(View.GONE); List<RssItem> items = (List<RssItem>) intent.getSerializableExtra(RssService.ITEMS); if (items != null) { RssAdapter adapter = new RssAdapter(getActivity(), items); listView.setAdapter(adapter); } else { Toast.makeText(getActivity(), "An error occurred while downloading the rss feed.", Toast.LENGTH_LONG).show(); } } }; @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { RssAdapter adapter = (RssAdapter) parent.getAdapter(); RssItem item = (RssItem) adapter.getItem(position); Uri uri = Uri.parse(item.getLink()); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent); } @Override public void onStart() { super.onStart(); IntentFilter intentFilter = new IntentFilter(RssService.ACTION_RSS_PARSED); LocalBroadcastManager.getInstance(getActivity()).registerReceiver(resultReceiver, intentFilter); } @Override public void onStop() { super.onStop(); LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(resultReceiver); }
мой app_bar_main :
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:id="@+id/fragment_container" android:layout_height="match_parent" />
это было основное действие в приложении, которое вызывало RssFragment, прежде чем перейти к основному действию navigition drawer :
public class MainActivity extends AppCompatActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); if (savedInstanceState == null) { addRssFragment(); } } private void addRssFragment() { FragmentManager manager = getSupportFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); RssFragment fragment = new RssFragment(); transaction.add(R.id.fragment_container, fragment); transaction.commit(); } }
Я действительно хочу помочь с этим!!
Примечание: приложение работало хорошо,но когда я переместил его в навигационный ящик, он не работал, и активность ничего не показывает, просто проведите пальцем, чтобы обновить виджет.
Что я уже пробовал:
измените макет кадра, чтобы он был :
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:id="@+id/fragment_container" android:layout_height="match_parent" />
и попробуйте вызвать RSSfragmet с помощью :
FragmentManager manager = getSupportFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); RssFragment fragment = new RssFragment(); transaction.add(R.id.fragment_container, fragment); transaction.commit();
David Crow
Ваш RSS-канал отображается в меню навигации?
Member 13366692
нет