2015-10-21 2 views
1

Существует некоторая информация, которую я хочу отобразить в NavigationDrawer. Эта информация вводится пользователем в предыдущем действии. Я использую намерение отправить информацию в основную деятельность для ящика.Обновление TextView в NavigationDrawer после ввода от пользователя в предыдущем действии

MainActivity (После того, как пользователь ввел подробности)

public class MainActivity extends AppCompatActivity implements FragmentDrawer.FragmentDrawerListener { 

private static String TAG = MainActivity.class.getSimpleName(); 

private Toolbar mToolbar; 
private FragmentDrawer drawerFragment; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Intent intent = getIntent(); 
    String info = intent.getStringExtra("info"); 

    mToolbar = (Toolbar) findViewById(R.id.toolbar); 

    setSupportActionBar(mToolbar); 
    getSupportActionBar().setDisplayShowHomeEnabled(true); 

    drawerFragment = (FragmentDrawer) 
      getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer); 
    drawerFragment.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout), mToolbar); 
    drawerFragment.setDrawerListener(this); 


    // display the first navigation drawer view on app launch 
    displayView(0); 
} 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    if(id == R.id.action_search){ 
     Toast.makeText(getApplicationContext(), "Search action is selected!", Toast.LENGTH_SHORT).show(); 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

@Override 
public void onDrawerItemSelected(View view, int position) { 
    displayView(position); 
} 

private void displayView(int position) { 
    Fragment fragment = null; 
    String title = getString(R.string.app_name); 
    switch (position) { 
     case 0: 
      fragment = new HomeFragment(); 
      title = getString(R.string.nav_item_dashboard); 
      break; 
      ...... 
    } 

У меня есть конкретный формат для панели навигации и содержит TextView, который я хочу, чтобы обновить с помощью теста String. Это код фрагмента и xml для него.

FragmentDrawer Класс

public FragmentDrawer() { 

} 

public void setDrawerListener(FragmentDrawerListener listener) { 
    this.drawerListener = listener; 
} 

public static List<NavDrawerItem> getData() { 
    List<NavDrawerItem> data = new ArrayList<>(); 

    // preparing navigation drawer items 
    for (int i = 0; i < titles.length; i++) { 
     NavDrawerItem navItem = new NavDrawerItem(); 
     navItem.setTitle(titles[i]); 
     navItem.setIcon(icons.getResourceId(i,-1)); 
     data.add(navItem); 
    } 
    return data; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // drawer labels 
    titles = getActivity().getResources().getStringArray(R.array.nav_drawer_labels); 
    icons = getResources().obtainTypedArray(R.array.nav_drawer_icons); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflating view layout 
    View layout = inflater.inflate(R.layout.fragment_navigation_drawer, container, false); 
    recyclerView = (RecyclerView) layout.findViewById(R.id.drawerList); 

    TextView userID = (TextView) layout.findViewById(R.id.nav_title_user); 

    adapter = new NavigationDrawerAdapter(getActivity(), getData()); 
    recyclerView.setAdapter(adapter); 
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 
    recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getActivity(), recyclerView, new ClickListener() { 
     @Override 
     public void onClick(View view, int position) { 
      drawerListener.onDrawerItemSelected(view, position); 
      mDrawerLayout.closeDrawer(containerView); 
     } 

     @Override 
     public void onLongClick(View view, int position) { 

     } 
    })); 

    return layout; 
} 

public void setUp(int fragmentId, DrawerLayout drawerLayout, final Toolbar toolbar) { 
    containerView = getActivity().findViewById(fragmentId); 
    mDrawerLayout = drawerLayout; 
    mDrawerToggle = new ActionBarDrawerToggle(getActivity(), drawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close) { 
     @Override 
     public void onDrawerOpened(View drawerView) { 
      super.onDrawerOpened(drawerView); 
      getActivity().invalidateOptionsMenu(); 
     } 

     @Override 
     public void onDrawerClosed(View drawerView) { 
      super.onDrawerClosed(drawerView); 
      getActivity().invalidateOptionsMenu(); 
     } 

     @Override 
     public void onDrawerSlide(View drawerView, float slideOffset) { 
      super.onDrawerSlide(drawerView, slideOffset); 
      toolbar.setAlpha(1 - slideOffset/2); 
     } 
    }; 

    mDrawerLayout.setDrawerListener(mDrawerToggle); 
    mDrawerLayout.post(new Runnable() { 
     @Override 
     public void run() { 
      mDrawerToggle.syncState(); 
     } 
    }); 

} 

FramgentDrawer.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@android:color/white"> 


<RelativeLayout 
    android:id="@+id/nav_header_container" 
    android:layout_width="match_parent" 
    android:layout_height="140dp" 
    android:layout_alignParentTop="true" 
    android:background="@color/colorPrimary"> 

    ...... 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceInverse" 
     android:text="@string/welcome_user" 
     android:id="@+id/nav_title_user" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginBottom="10dp"/> 

</RelativeLayout> 


<android.support.v7.widget.RecyclerView 
    android:id="@+id/drawerList" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="15dp" 
    android:layout_below="@id/nav_header_container" /> 

мне удалось обновить список в ящике с икон, этикетки и заголовка. Я сделал это, используя RecyclerViewAdapter.

Проблема, с которой я сталкиваюсь, заключается в том, что эти данные были из ресурсов (strings.xml).

Как я могу обновить текстовое представление на NavigationFragment, когда оно было создано? Как я могу отправить значение фрагменту, чтобы он использовался во время OnCreateView фрагмента?

+0

показать свой XML и код – Pavan

+0

Я нахожусь столкнувшись с одной и той же проблемой, можете ли вы рассказать мне, как у обновлены тексты элементов списка, например «login» для «logout»? –

ответ

1

Я искал слишком много. Решение было довольно простым ... Несмотря на то, что мне понадобилось 3 часа, чтобы понять это:/

В NavigationFragment я создал метод для обновления текстового представления с помощью строки. В MainActivity, где я получаю информацию от намерения, я просто назвал метод как это:

drawerFragment.setUserTextView(info); 

Вот почему Перерывы важны ... ^^

+0

Я столкнулся с той же проблемой, может ли сказать, что у меня обновлены тексты элементов списка, например «login» to «logout»? –

 Смежные вопросы

  • Нет связанных вопросов^_^