Помощь с ViewHolder
Помогите с ViewHolder. Хочу, чтобы при нажатии на Fragment сбоку появлялась памятка, типа вот этого (я про 3):
Но бьет ошибку! Помогите...
public class MainActivity extends ActionBarActivity implements
MultiSwipeRefreshLayout.CanChildScrollUpCallback {
private String[] mDrawerTitles;
private TypedArray mDrawerIcons;
private TypedArray mDrawerIconsNew;
private ArrayList<Items> drawerItems;
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private ActionBarDrawerToggle mDrawerToggle;
private CharSequence mDrawerTitle;
private CharSequence mTitle;
private static FragmentManager mManager;
ViewHolder viewHolder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
if (toolbar != null) setSupportActionBar(toolbar);
mManager = getSupportFragmentManager();
mDrawerTitles = getResources().getStringArray(R.array.drawer_titles);
mDrawerIcons = getResources().obtainTypedArray(R.array.drawer_icons);
mDrawerIconsNew = getResources().obtainTypedArray(R.array.drawer_icons_new);
drawerItems = new ArrayList<Items>();
mDrawerList = (ListView) findViewById(R.id.left_drawer);
for (int i = 0; i < mDrawerTitles.length; i++) {
drawerItems.add(new Items(mDrawerTitles[i], mDrawerIcons.getResourceId(i, -(i + 1))));
}
mTitle = mDrawerTitle = getTitle();
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerToggle = new ActionBarDrawerToggle(
this, /* host Activity */
mDrawerLayout, /* DrawerLayout object */
toolbar, /* nav drawer icon to replace 'Up' caret */
R.string.drawer_open, /* "open drawer" description */
R.string.drawer_close /* "close drawer"ggg description */
) {
/** Called when a drawer has settled in a completely closed state. */
public void onDrawerClosed(View view) {
super.onDrawerClosed(view);
getSupportActionBar().setTitle(mTitle);
}
/** Called when a drawer has settled in a completely open state. */
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
getSupportActionBar().setTitle(mDrawerTitle);
}
};
// Set the drawer toggle as the DrawerListener
mDrawerLayout.setDrawerListener(mDrawerToggle);
LayoutInflater inflater = getLayoutInflater();
final ViewGroup header = (ViewGroup) inflater.inflate(R.layout.header,
mDrawerList, false);
mDrawerList.addHeaderView(header, null, true); // true = clickable
//mDrawerList.addFooterView(footer, null, true); // true = clickable
//Set width of drawer
DrawerLayout.LayoutParams lp = (DrawerLayout.LayoutParams) mDrawerList.getLayoutParams();
lp.width = calculateDrawerWidth();
mDrawerList.setLayoutParams(lp);
// Set the adapter for the list view
mDrawerList.setAdapter(new DrawerAdapter(getApplicationContext(), drawerItems));
// Set the list's click listener
mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
mDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mDrawerToggle.onConfigurationChanged(newConfig);
}
/* Called whenever we call invalidateOptionsMenu() */
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// If the nav drawer is open, hide action items related to the content view
boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
menu.findItem(R.id.action_settings).setVisible(!drawerOpen);
return super.onPrepareOptionsMenu(menu);
}
private void selectItem(int position) {
Fragment fragment = null;
switch (position) {
case 0:
//Account
break;
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
case 7:
break;
case 8:
break;
case 9:
break;
case 10:
break;
case 11:
break;
case 12:
break;
case 13:
break;
case 14:
break;
case 15:
break;
case 16:
break;
}
if (fragment != null) {
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.main_content, fragment)
.commit();
}
mDrawerList.setItemChecked(position, true);
if (position != 0) {
setTitle(mDrawerTitles[position - 1]);
updateView(position, position, true);
}
mDrawerLayout.closeDrawer(mDrawerList);
}
@Override
public void setTitle(CharSequence title) {
mTitle = title;
getSupportActionBar().setTitle(mTitle);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
switch (item.getItemId()) {
case R.id.action_settings:
Share();
break;
default:
return true;
}
return super.onOptionsItemSelected(item);
}
public int calculateDrawerWidth() {
// Calculate ActionBar height
TypedValue tv = new TypedValue();
int actionBarHeight = 0;
if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true)) {
actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data, getResources().getDisplayMetrics());
}
Display display = getWindowManager().getDefaultDisplay();
int width;
int height;
if (android.os.Build.VERSION.SDK_INT >= 13) {
Point size = new Point();
display.getSize(size);
width = size.x;
height = size.y;
} else {
width = display.getWidth(); // deprecated
height = display.getHeight(); // deprecated
}
return width - actionBarHeight;
}
private static class ViewHolder {
private View v;
private TextView someText;
private ViewHolder(View view) {
this.v = view;
this.someText = (TextView) view.findViewById(R.id.item_text_new);
}
}
private void updateView(int position, int counter, boolean visible) {
View view = mDrawerList.getChildAt(position -
mDrawerList.getFirstVisiblePosition());
switch (position) {
case 1:
viewHolder.someText.setText(getString(R.string.social, position));
viewHolder.someText.setBackgroundColor(getResources().getColor(R.color.button_material_dark));
break;
case 2:
viewHolder.someText.setText(getString(R.string.settings, position));
viewHolder.someText.setBackgroundColor(getResources().getColor(R.color.button_material_dark));
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
case 7:
break;
case 8:
break;
case 9:
break;
case 10:
break;
case 11:
break;
case 12:
break;
case 13:
break;
case 14:
break;
case 15:
break;
}
}
@Override
public boolean canSwipeRefreshChildScrollUp() {
return false;
}
private class DrawerItemClickListener implements ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView parent, View view, int position, long id) {
selectItem(position);
}
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public void circleIn(View view) {
// get the center for the clipping circle
int cx = (view.getLeft() + view.getRight()) / 2;
int cy = (view.getTop() + view.getBottom()) / 2;
// get the final radius for the clipping circle
int finalRadius = Math.max(view.getWidth(), view.getHeight());
// create the animator for this view (the start radius is zero)
Animator anim =
ViewAnimationUtils.createCircularReveal(view, cx, cy, 0, finalRadius);
// make the view visible and start the animation
view.setVisibility(View.VISIBLE);
anim.start();
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public void circleOut(final View view) {
// get the center for the clipping circle
int cx = (view.getLeft() + view.getRight()) / 2;
int cy = (view.getTop() + view.getBottom()) / 2;
// get the initial radius for the clipping circle
int initialRadius = view.getWidth();
// create the animation (the final radius is zero)
Animator anim =
ViewAnimationUtils.createCircularReveal(view, cx, cy, initialRadius, 0);
// make the view invisible when the animation is done
anim.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
view.setVisibility(View.INVISIBLE);
}
});
// start the animation
anim.start();
}
private void Share() {
}
}
Стектрейс:
FATAL EXCEPTION: main
Process: by.sviter.allbestlessons, PID: 8440
java.lang.NullPointerException: Attempt to read from field 'android.widget.TextView by.sviter.allbestlessons.activities.MainActivity$ViewHolder.someText' on a null object reference
at by.sviter.allbestlessons.activities.MainActivity$ViewHolder.access$L1000019(MainActivity.java)
at by.sviter.allbestlessons.activities.MainActivity.updateView(MainActivity.java:352)
at by.sviter.allbestlessons.activities.MainActivity.selectItem(MainActivity.java:272)
at by.sviter.allbestlessons.activities.MainActivity.access$1000017(MainActivity.java)
at by.sviter.allbestlessons.activities.MainActivity$DrawerItemClickListener.onItemClick(MainActivity.java:410)
at android.widget.AdapterView.performItemClick(AdapterView.java:300)
at android.widget.AbsListView.performItemClick(AbsListView.java:1143)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3044)
at android.widget.AbsListView$3.run(AbsListView.java:3833)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Источник: Stack Overflow на русском