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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Изменить картинку ImageButton виджета http://www.cyberforum.ru/android-dev/thread1532055.html
Как изменить картинку button_image после нажатия: boolean boot = false; @Override public void onReceive(Context context, Intent intent) { super.onReceive(context, intent); ...
Программирование Android Кастомный список Здравствуйте. Пытаюсь сделать список с помощью RecyclerView. Нужно разделить его на несколько частей, примерно 3-4. Каждая часть должна быть в CardView. Все части кроме одной состоят из обычных... http://www.cyberforum.ru/android-dev/thread1531942.html
Обработка нажатий на виджет Программирование Android
Почему не работает при нажатии на виджет? @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int appWidgetIds) { // There may be multiple widgets...
Программирование Android Ошибка приложения при удалении Title
Добрый день. Создал примитивное, но зато работающее приложение (Android Studio) -компилится , запускается как нужно. Но при попытки убрать Титл - компилиться нормально, но вот при запуске " произошла...
Программирование Android Dropbox. Странности с подключением http://www.cyberforum.ru/android-dev/thread1531758.html
В "App Console" создал Application. В Android-проекте выставил "App key" и "App secret", запустил и подключился к Dropbox. Создаю второй Android-проект, где выставляю те же значения. Запускаю,...
Программирование Android По каким критериям выбрать телефон для тестирования приложений В голову приходит взять смарт с последней версией андроида. Еще хочется как можно больше датчиков, хотя возможно какие то лишние. Не знаю на счет 4G, нужен ли для тестов, или это только скорость. подробнее

Показать сообщение отдельно
rkcz00
0 / 0 / 0
Регистрация: 03.04.2015
Сообщений: 56

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

16.09.2015, 22:03. Просмотров 584. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru