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

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); if (intent.getAction().equals(ACTION_TRAP)) { boot = !boot; } }
Android Кастомный список Здравствуйте. Пытаюсь сделать список с помощью RecyclerView. Нужно разделить его на несколько частей, примерно 3-4. Каждая часть должна быть в CardView. Все части кроме одной состоят из обычных элементов (у каждой части разные), а последняя должна содержать раскрываемые элементы. Собственно в чем проблема - если делать с разными viewType - не получится группировать списки в 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 active, so update all of them final int N = appWidgetIds.length; for (int i = 0; i < N; i++) { updateAppWidget(context, appWidgetManager, appWidgetIds); } }
Android Ошибка приложения при удалении Title
Добрый день. Создал примитивное, но зато работающее приложение (Android Studio) -компилится , запускается как нужно. Но при попытки убрать Титл - компилиться нормально, но вот при запуске " произошла ошибка" - и на этом все. Прописывал как в манифесте android:theme="@android:style/Theme.Black.NoTitleBar" Так и всамом ява файле requestWindowFeature(Window.FEATURE_NO_TITLE); Более того :...
Android Dropbox. Странности с подключением http://www.cyberforum.ru/android-dev/thread1531758.html
В "App Console" создал Application. В Android-проекте выставил "App key" и "App secret", запустил и подключился к Dropbox. Создаю второй Android-проект, где выставляю те же значения. Запускаю, пытаюсь подключиться: mDbxAcctMgr = DbxAccountManager.getInstance(getApplicationContext(), APP_KEY, APP_SECRET); Но onActivityResult() не срабатывает. Если после этого запустить первый проект, то и в...
Android По каким критериям выбрать телефон для тестирования приложений В голову приходит взять смарт с последней версией андроида. Еще хочется как можно больше датчиков, хотя возможно какие то лишние. Не знаю на счет 4G, нужен ли для тестов, или это только скорость. подробнее

Показать сообщение отдельно
rkcz00
0 / 0 / 0
Регистрация: 03.04.2015
Сообщений: 42
16.09.2015, 22:03     NavigationView с GridView
Здравствуйте!
Обучаюсь на курсах по 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);
        }
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 21:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru