Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
rkcz00
0 / 0 / 0
Регистрация: 03.04.2015
Сообщений: 56
#1

NavigationView с GridView - Программирование Android

16.09.2015, 22:03. Просмотров 568. Ответов 1
Метки нет (Все метки)

Здравствуйте!
Обучаюсь на курсах по Java и параллельно на Android.
Задали сделать простенькое приложенbt для Android, решил сделать свое приложение с обоями.
По примерам сделал NavigationView и GridView.
Встала проблема-не могу объединить все вместе. Ведь по логике вещей можно передать в слушателей нажатий Navigation метод из класса GridView , который будет сам обрабатывать картинки и ух уже передавать.
Как это реализовать, подскажите пожалуйста, бьюсь уже неделю.

Navigation
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import android.os.Bundle;
import android.support.design.widget.NavigationView;
import android.support.design.widget.Snackbar;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.view.View;
 
public class MainActivity extends AppCompatActivity {
 
    private DrawerLayout mDrawerLayout;
 
    @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);
            if (getSupportActionBar() != null)
                getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            toolbar.setNavigationOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // показываем шторку
                    mDrawerLayout.openDrawer(GravityCompat.START);
                }
            });
        }
        NavigationView navigationView = (NavigationView) findViewById(R.id.navigationView);
        if (navigationView != null) {
            setupDrawerContent(navigationView);
        }
 
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerLayout.openDrawer(GravityCompat.START); // показываем шторку при запуске
    }
 
    private void setupDrawerContent(NavigationView navigationView) {
        navigationView.setNavigationItemSelectedListener(
                new NavigationView.OnNavigationItemSelectedListener() {
                    @Override
                    public boolean onNavigationItemSelected(MenuItem menuItem) {
                        menuItem.setChecked(true);
                        mDrawerLayout.closeDrawers();
                        Snackbar.make(mDrawerLayout, "Выбран пункт " + menuItem.getTitle(),
                                Snackbar.LENGTH_SHORT).show();
                        return true;
                    }
                });
    }
 
 
}
GridView
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.NavigationView;
import android.support.design.widget.Snackbar;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
 
public class MainActivity extends AppCompatActivity {
 
    private DrawerLayout mDrawerLayout;
 
    @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);
            if (getSupportActionBar() != null)
                getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            toolbar.setNavigationOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // показываем шторку
                    mDrawerLayout.openDrawer(GravityCompat.START);
                }
            });
        }
        NavigationView navigationView = (NavigationView) findViewById(R.id.navigationView);
        if (navigationView != null) {
            setupDrawerContent(navigationView);
        }
 
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerLayout.openDrawer(GravityCompat.START); // показываем шторку при запуске
    }
 
    private void setupDrawerContent(NavigationView navigationView) {
        navigationView.setNavigationItemSelectedListener(
                new NavigationView.OnNavigationItemSelectedListener() {
                    @Override
                    public boolean onNavigationItemSelected(MenuItem menuItem) {
                        menuItem.setChecked(true);
                        mDrawerLayout.closeDrawers();
                        TestGridViewActivity activity = new TestGridViewActivity();
 
 
 
                        return true;
                    }
                });
    }
 
 
}
ActivitySecond
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
import android.app.Activity;
import android.app.WallpaperManager;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
 
import com.squareup.picasso.Picasso;
import com.squareup.picasso.Target;
 
import java.io.IOException;
 
public class ActivitySecond extends Activity {
    //переменная с характеристиками экрана
    DisplayMetrics metricsB;
    WallpaperManager myWallpaperManager;
    private Button btn_SetWallPaper;
    private ViewPager viewPager;
    int position;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        //получаем информацию о дисплее и заносим в переменную его физические показатели
        Display display = getWindowManager().getDefaultDisplay();
        metricsB = new DisplayMetrics();
        display.getMetrics(metricsB);
        //получаем менеджер обоев
        myWallpaperManager = WallpaperManager.getInstance(getApplicationContext());
 
        btn_SetWallPaper = (Button)findViewById(R.id.btn_SetWallpaper);
 
        //вытаскиваем номер позиции нажатого элемента из интента, если в интенте пусто то вернет -1
        position = getIntent().getIntExtra("position", -1);
        //Вместо ImageView будем использовать ViewPager
        viewPager = (ViewPager)findViewById(R.id.viewPager);
        //создаем для ViewPager адаптер
        //загрузку картинок переносим в реализацию адаптера
        ImagePagerAdapter adapter = new ImagePagerAdapter(this);
        viewPager.setAdapter(adapter);
        //устанавливаем ViewPager на нужную картинку
        viewPager.setCurrentItem(position);
        //вешаем на кнопку слушателя нажатий
        btn_SetWallPaper.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //вызываем функцию загрузки картинки для установки на рабочий стол
                loadBitmap();
            }
        });
    }
 
    //Создаем временный target для использования его в мотоде loadBitmap вместо ImageView
    private Target target = new Target() {
        @Override
        public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
            //когда картинка загрузилать вызываем метод установки обоев
            setWallpapers(bitmap);
        }
 
        @Override
        public void onBitmapFailed(Drawable errorDrawable) {
 
        }
 
        @Override
        public void onPrepareLoad(Drawable placeHolderDrawable) {
 
        }
    };
 
    private void setWallpapers(Bitmap bitmap) {
        //что бы не рухнуло приложение в случае если что-то пошло не так устанавливаем через try
        try {
            myWallpaperManager.setBitmap(bitmap);
            Toast.makeText(getApplicationContext(), "Новые обои установлены", Toast.LENGTH_SHORT).show();
            //после того как картинка установлена закрываем активность (соответственно вернемся в 1-ю активность)
            finish();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
 
    private void loadBitmap() {
        //загружаем картинку во временно созданый target
        //саму установку картинки на рабочий стол выполняем в методу onBitmapLoaded созданного target
        Picasso.with(this)
                .load(TestGridViewActivity.mThumbIds[viewPager.getCurrentItem()])
                .noFade()
                .resize(myWallpaperManager.getDesiredMinimumWidth(), myWallpaperManager.getDesiredMinimumHeight())
                .centerCrop()
                .into(target);
    }
 
    @Override public void onDestroy() {  // Возможно нужно перенести в onPause или onStop
        //при закрытии активности очищаем временно созданый target
        Picasso.with(this).cancelRequest(target);
        super.onDestroy();
    }
 
    //Адаптер для ViewPager
    private class ImagePagerAdapter extends PagerAdapter{
        private Context mContext;
 
        public ImagePagerAdapter(Context context) {
            this.mContext = context;
        }
 
        @Override
        public int getCount() {
            //элементы для ViewPager будем использовать из масива в MainActivity
            return TestGridViewActivity.mThumbIds.length;
        }
 
        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == ((ImageView) object);
        }
 
        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            //инициализируем ImageView для страницы ViewPager
            ImageView imageView = new ImageView(mContext);
            imageView.setPadding(0,0,0,0);
            imageView.setScaleType(ImageView.ScaleType.CENTER);
            //загружаем картинку
            Picasso.with(ActivitySecond.this)
                    .load(TestGridViewActivity.mThumbIds[position])
                    .placeholder(R.raw.place_holder)
                    .noFade()
                    .resize(metricsB.widthPixels, metricsB.heightPixels)
                    .centerInside()
                    .error(R.raw.big_problem)
                    .into(imageView);
            ((ViewPager) container).addView(imageView, 0);
            return imageView;
        }
 
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            ((ViewPager) container).removeView((ImageView) object);
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2015, 22:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос NavigationView с GridView (Программирование Android):

NavigationView на фрагментах - Программирование Android
Всем привет! Нужен совет. Задача банальная. Приложение с NavigationView + Toolbar, доступ к которому должен быть с любой активити в...

Как поместить Switch в NavigationView? - Программирование Android
Как поместить Switch в NavigationView? Пробовал поместить в меню NavigationView,но ничего не отображается activity_maps_drawer <?xml...

Анимация NavigationView - не обрабатываются события от кнопок - Программирование Android
Решил опробовать данное решение.https://github.com/mxn21/FlowingDrawer. Проблема никак не могу обработать события с кнопок. Главное...

GridView - Программирование Android
Здравствуйте, подскажите где посмотреть пример для прокрутки грида в горизонтальном направлении, если не умещается все ячейки на экран. И...

GridView и ViewPager - Программирование Android
Всем привет. У меня есть GridView, в котором можно, конечно же, тыкать на пункты списка и открывать новую активити: например,...

Не заполняется gridview - Программирование Android
Не могу разобраться в чем причина. На телефоне запускаю, а гридвью пустой. По-сути задача в том, чтобы при нажатии открывалась новая...

1
contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 598
24.09.2015, 04:09 #2
Честно говоря, не очень понял, в чем конкретно у Вас загвоздка. Но если Вы попытались реализовать их в отдельных Activity, то объединить их не получится. Либо просто запихните все в одну xml-разметку (или динамически все в одной Activity создайте), либо, если хотите вынести код в разные классы, то используйте одну Activity, а в ней фрагменты (Fragment).
Если ранее не сталкивались с ними, то советую ознакомится, это очень мощный инструмент в Android, который позволит Вам строить очень сложные и динамические интерфейсы (графические в смысле).
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.09.2015, 04:09
Привет! Вот еще темы с ответами:

GridView и обрабочик - Программирование Android
Всем привет,у меня такой вопрос ,я создал GridView и хочу сделать,чтоб при нажатие на позицию один у меня в этой позиции появлялась...

Работа с GridView - Программирование Android
Здравствуйте. На данный момент мой уровень знаний программирования 1% из 100000. Учусь. 8( Подскажите пожалуйста вот у меня есть GridView и...

GridView в фокусе - Программирование Android
Как можно программно установить фокус на сетке на экране в GridView например на позицию 0 ?

Image in GridView - Программирование Android
Доброго времени суток! Столкнулся с проблемой,есть гридвью в который адаптированы изображения, необходимо чтобы при нажатии изображение...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru