ListFragment и Контекстное меню
Добавлено: 07 мар 2015, 19:05
Доброго времени суток.
Делаю приложение для диплома и решил, что просто вывод в ListView как-то не солидно, ListActivity - так и не получилось прикрутить ActionBar, поэтому остановился на ListFragment.
Собственно в двух словах суть такова: добавляем элемент и он отображает инфо-цию, удаляем элемент если не нужен нам.
Так вот с добавлением я разобрался, хотя и не сразу, а вот с удалением..
Если я удаляю элемент через кнопку на actionbar - все ок и работает, но при использовании контекстного меню уже ничего не получается.
Код по идее меняться не должен, но дело в том, что меню с элементами появляется, а код при нажатии на какой-нить элемент не выполняется, т.е. метод onOptionsItemSelected не вызывается. Просмотрел уже тучу всяких интернетов, не понимаю где и что у меня не так.
А теперь все необходимые исходники:
universal.java
UniAdapter.java
list_fragment.xml
list_item.xml
strings.xml
MainActivity.java
list_item_context.xml
Заранее спс. Очень прошу ткнуть носом в косяк, потому что голова уже не соображает...
Делаю приложение для диплома и решил, что просто вывод в ListView как-то не солидно, ListActivity - так и не получилось прикрутить ActionBar, поэтому остановился на ListFragment.
Собственно в двух словах суть такова: добавляем элемент и он отображает инфо-цию, удаляем элемент если не нужен нам.
Так вот с добавлением я разобрался, хотя и не сразу, а вот с удалением..
Если я удаляю элемент через кнопку на actionbar - все ок и работает, но при использовании контекстного меню уже ничего не получается.
Код по идее меняться не должен, но дело в том, что меню с элементами появляется, а код при нажатии на какой-нить элемент не выполняется, т.е. метод onOptionsItemSelected не вызывается. Просмотрел уже тучу всяких интернетов, не понимаю где и что у меня не так.
А теперь все необходимые исходники:
universal.java
Код: Выделить всё
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;
}
Код: Выделить всё
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;
}
Код: Выделить всё
<?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>Код: Выделить всё
<?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>Код: Выделить всё
<?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>Код: Выделить всё
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);
}
}
}
}
Код: Выделить всё
<?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>