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

ListFragment и Контекстное меню - Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Android Переход через фрагмент на активити http://www.cyberforum.ru/android-dev/thread1389996.html
Добрый день ! Какой код должен быть чтобы на "активити 1" с открытым фрагментом , на котором есть кнопка при нажатии на которую активити1 меняется на активти2 ?
Android ListView сообщения с прикрепленными элементами В ListView итемы состоят из сообщений с прикрепленными элементами. Для того чтобы добавить эти элементы к сообщению я циклом добавляю вьюхи в LinearLayout. Но при прокрутке элементы меняються случайным образом. Раньше, в подобных случаях, я указывал тип вью, и тогда проблема исчезала, но как теперь это сделать я не знаю. Прикрепленных элементов может быть множество, и состоят они из разных... http://www.cyberforum.ru/android-dev/thread1389978.html
Android Анимация печатания текста в TextView
Приветствую всех. Сразу покажу, чего хочу добиться (черные косяки вокруг букв в планы не входят :D). Есть String, есть textView (но не обязательно именно он). Нужно программно "напечатать" в течение времени String в textView. В идеале хотелось бы иметь возможность изменять интервалы между символами (каждый следующий выводить с рандомной задержкой, чтобы больше походило на человеческий...
Как получить текст из ID Android
У каждого виджета на активити есть свой уникальный id. При добавлении виджета нужно указать его id в виде строки. Как можно потом программно получить эту строку? Есть метод getID, но он же возвращает ID в виде числа.
Android ADB не инициализируется как нужно http://www.cyberforum.ru/android-dev/thread1389591.html
Устновлена чистая Android Studio. Установлены все последние обновления. Стоит Java SDK 1.7. Пытаюсь создать пустой тестовый проект. При запуске приложения через эмулятор ADB не удается найти или запустить. В чем может быть проблема?
Android Почему у меня не добавляются <item> ? Доброе утро. У меня не получается добавить новый элемент в ActionBar. Делаю, вроде, все правильно. А в итоге, элементы отображаются вот так: Изучаю андроид. Мучаюсь уже два дня, что я не так делаю ? Исходный код menu_main.xml: <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" ... подробнее

Показать сообщение отдельно
FeonoR
11 / 0 / 1
Регистрация: 22.03.2012
Сообщений: 27

ListFragment и Контекстное меню - Android

08.03.2015, 05:17. Просмотров 528. Ответов 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. Просто фейспалм...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru