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

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

Войти
Регистрация
Восстановить пароль
 
FeonoR
11 / 0 / 1
Регистрация: 22.03.2012
Сообщений: 27
#1

ListFragment и Контекстное меню - Программирование Android

08.03.2015, 05:17. Просмотров 541. Ответов 0
Метки нет (Все метки)

Доброго времени суток.
Делаю приложение для диплома и решил, что просто вывод в ListView как-то не солидно, ListActivity - так и не получилось прикрутить ActionBar, поэтому остановился на ListFragment.
Собственно в двух словах суть такова: добавляем элемент и он отображает инфо-цию, удаляем элемент если не нужен нам.
Так вот с добавлением я разобрался, хотя и не сразу, а вот с удалением..
Если я удаляю элемент через кнопку на actionbar - все ок и работает, но при использовании контекстного меню уже ничего не получается.
Код по идее меняться не должен, но дело в том, что меню с элементами появляется, а код при нажатии на какой-нить элемент не выполняется, т.е. метод onOptionsItemSelected не вызывается. Просмотрел уже тучу всяких интернетов, не понимаю где и что у меня не так.

А теперь все необходимые исходники:
universal.java
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
package com.link.tes;
 
public class universal {
 
    public String balance = "";
    public String log = "";
    public String oper = "";
    public int icon;
 
    public universal(String o, String l, String b, int icon){
        this.log = l;
        this.oper = o;
        this.balance = b;
        this.icon = icon;
        Log.i("ok", "ok");
    }
 
    public String getOper() {
        return oper;
    }
 
    public void setOper(String title) {
        this.oper = oper;
    }
 
    public int getIcon() {
        return icon;
    }
 
    public void setIcon(int icon) {
        this.icon = icon;
    }
 
    public String getLog() {
        return log;
    }
 
    public void setLog(String num) {
        this.log = log;
    }
UniAdapter.java
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
package com.link.tes;
 
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
 
import java.util.ArrayList;
 
public class UniAdapter extends BaseAdapter {
 
    Context context;
    ArrayList<universal> unilist;
 
    UniAdapter(Context context, ArrayList<universal> unilist){
 
        this.context = context;
        this.unilist = unilist;
    }
 
    @Override
    public int getCount() {
 
        return unilist.size();
    }
 
    @Override
    public Object getItem(int position) {
 
        return unilist.get(position);
    }
 
    @Override
    public long getItemId(int position) {
 
        return unilist.indexOf(getItem(position));
    }
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
 
        if (convertView == null) {
            LayoutInflater mInflater = (LayoutInflater) context
                    .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
            convertView = mInflater.inflate(R.layout.list_item, null);
        }
 
        ImageView imgIcon = (ImageView) convertView.findViewById(R.id.imageView);
        TextView txtTitle = (TextView) convertView.findViewById(R.id.text1);
        TextView num = (TextView) convertView.findViewById(R.id.text2);
 
        universal uni_pos = unilist.get(position);
        imgIcon.setImageResource(uni_pos.getIcon());
        txtTitle.setText(uni_pos.getOper());
        num.setText(uni_pos.getLog());
 
        return convertView;
    }
list_fragment.xml
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
 
    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"></ListView>
 
    <TextView
        android:id="@android:id/empty"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"></TextView>
 
</LinearLayout>
list_item.xml
XML
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
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="48dp"
    android:padding="2dp">
 
    <TextView
        android:id="@+id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginLeft="37dp"
        android:layout_marginStart="37dp"
        android:layout_toEndOf="@+id/imageView"
        android:layout_toRightOf="@+id/imageView"
        android:height="50dp"
        android:gravity="center_vertical|center|center_horizontal"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />
 
    <TextView
        android:id="@+id/text2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/text3"
        android:layout_alignWithParentIfMissing="false"
        android:layout_marginEnd="31dp"
        android:layout_marginRight="31dp"
        android:layout_toLeftOf="@+id/text3"
        android:layout_toStartOf="@+id/text3"
        android:layout_weight="0.98"
        android:height="50dp"
        android:gravity="center"
        android:text="Medium Text"
        android:textAlignment="center"
        android:textAppearance="?android:attr/textAppearanceMedium" />
 
    <TextView
        android:id="@+id/text3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:height="50dp"
        android:gravity="center_vertical|center|center_horizontal"
        android:text="Large"
        android:textAlignment="center"
        android:textAppearance="?android:attr/textAppearanceLarge" />
 
    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignTop="@+id/text1"
        android:contentDescription="@string/imgdesc" />
</RelativeLayout>
strings.xml
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">Tes</string>
    <string name="hello_world">Hello world!</string>
    <string name="action_settings">Settings</string>
    <string name="imgdesc">imgdesc</string>
    <string name="action_add">Добавить</string>
    <string name="delete_crime">Удалить</string>
    <string name="add_crime">Добавить</string>
 
    <array name="icons">
        <item>@drawable/home</item>
        <item>@drawable/tutorials</item>
    </array>
 
</resources>
MainActivity.java
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
package com.link.tes;
 
import android.app.FragmentManager;
import android.app.ListFragment;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Toast;
 
import java.util.ArrayList;
 
public class MainActivity extends ActionBarActivity {
 
    public static UniAdapter adapter;
    public static ArrayList<universal> uniItems = new ArrayList<>();
    static TypedArray menuIcons;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        menuIcons = getResources().obtainTypedArray(R.array.icons);
        uniItems = new ArrayList<>();
        adapter = new UniAdapter(this, uniItems);
 
        FragmentManager fm = getFragmentManager();
 
        if (fm.findFragmentById(android.R.id.content) == null) {
            MyListFragment list = new MyListFragment();
            fm.beginTransaction().add(android.R.id.content, list).commit();
        }
    }
 
    @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.
        switch (item.getItemId()) {
            case R.id.action_add:
                universal items = new universal("rtk", "123", "123", menuIcons.getResourceId(1, -1));
                uniItems.add(items);
                adapter.notifyDataSetChanged();
                return true;
 
            case R.id.action_del:
                uniItems.remove(0);
                adapter.notifyDataSetChanged();
 
            default:
                return true;
        }
    }
 
 
    static public class MyListFragment extends ListFragment implements AdapterView.OnItemClickListener {
 
        @Override
        public void onCreate(Bundle savedInstanceState) {
 
            super.onCreate(savedInstanceState);
            setListAdapter(adapter);
        }
 
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
 
            return inflater.inflate(R.layout.list_fragment, null, false);
        }
 
        @Override
        public void onActivityCreated(Bundle savedInstanceState) {
 
            getListView().setOnItemClickListener(this);
            registerForContextMenu(this.getListView());
            super.onActivityCreated(savedInstanceState);
        }
 
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                                long id) {
 
            Toast.makeText(getActivity(), menutitles[position], Toast.LENGTH_SHORT)
                    .show();
        }
 
        @Override
        public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
            super.onCreateContextMenu(menu, v, menuInfo);
            getActivity().getMenuInflater().inflate(R.menu.list_item_context, menu);
        }
 
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            Log.i("ContextMenu", "Item ");
            AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
            int pos = info.position;
//
            switch (item.getItemId()) {
                case R.id.menu_item_delete:
                    Log.i("ContextMenu", "Item 1a was chosen");
                    uniItems.remove(0);
                    adapter.notifyDataSetChanged();
                    return true;
                case R.id.menu_item_add:
                    Log.i("ContextMenu", "Item 1a was chosen");
                    universal items = new universal("rtk", "123", "123", menuIcons.getResourceId(1, -1));
                    uniItems.add(items);
                    adapter.notifyDataSetChanged();
//
                    return true;
                default:
                return super.onOptionsItemSelected(item);
            }
        }
 
 
    }
}
menu_main.xml
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MainActivity">
    <item
        android:id="@+id/action_add"
        android:icon="@android:drawable/ic_menu_add"
        android:orderInCategory="100"
        android:title="@string/action_add"
        app:showAsAction="ifRoom|withText" />
    <item
        android:id="@+id/action_del"
        android:icon="@android:drawable/ic_menu_delete"
        android:orderInCategory="100"
        android:title="@string/action_add"
        app:showAsAction="ifRoom|withText" />
</menu>
list_item_context.xml
XML
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="utf-8"?> <menu
 
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/menu_item_delete"
        android:icon="@android:drawable/ic_menu_delete"
        android:title="@string/delete_crime" />
    <item android:id="@+id/menu_item_add"
        android:icon="@android:drawable/ic_menu_delete"
        android:title="@string/add_crime" />
 
</menu>
Заранее спс. Очень прошу ткнуть носом в косяк, потому что голова уже не соображает...

Добавлено через 1 час 15 минут
Застрелите меня кислым помидором за мою невнимательность - проблема в том, что я почему-то использовал метод: onOptionsItemSelected, а надо было onContextItemSelected. Просто фейспалм...

Добавлено через 16 секунд
Застрелите меня кислым помидором за мою невнимательность - проблема в том, что я почему-то использовал метод: onOptionsItemSelected, а надо было onContextItemSelected. Просто фейспалм...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.03.2015, 05:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос ListFragment и Контекстное меню (Программирование Android):

Боковое меню (Navigation Drawer) в ListFragment - Программирование Android
Вообщем нужно реализовать данный паттерн в ListFragment, и возникли некоторые вопросы. XML файл для реализации меню обрабатывается в...

Контекстное меню в ListView - Программирование Android
Здравствуйте,выложите пожалуйста рабочий код контекстного меню для listview и напишите пожалуйста куда вставлять этот код.

Контекстное меню на ExpandableListView - Программирование Android
Здравствуйте! подскажите как правильно определить пункт ExpandableListView (группа или элемент группы) на котором было вызвано...

ListView и контекстное меню - Программирование Android
Подскажите как сделать так, чтобы контекстное меню знало пункт listview из которого оно было вызвано? Пытался сохранить пункт в...

Контекстное меню не работает - Программирование Android
Доброго времени суток. Я отбираю записи из базы и формирую список в ListView, насаживая на каждый элемент событие onClick, чтобы...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.03.2015, 05:17
Привет! Вот еще темы с ответами:

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

ListFragment - Программирование Android
Всем доброго дня. Уперся малеько в дно. Из MainActivity через NavigationDrawer перехожу в ListFragment. Подскажите что делать дальше?...

ListFragment - Программирование Android
В ListFragment выводятся файлы, надо сделать возврат по кнопке &quot;назад&quot; для возврата в папку на уровень выше. Вот код Activity package...

Listfragment Super - Программирование Android
Добрый день в где тут проблема. public class ItemFragment extends ListFragment { @Override protected void...


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

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

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