Этот код работает до тех пор, пока я не получу список событий. Выберите один и перейдите к деталям, и я могу обновить и т. Д., И я вернусь в свой список. Первый элемент становится кнопкой «ДОБАВИТЬ», а второй элемент становится функцией «Выход». Но я хочу настоящих кнопок.Как заставить кнопки работать?
Я добавил реальные кнопки, и после попыток код, предназначенный для обработки реальных кнопок, либо имеет ошибки, либо просто падает. Моя последняя копируется непосредственно с этого сайта:
How to handle button clicks using the XML onClick within Fragments
Посмотрите на код между двойной «****». Что я ошибаюсь?
Я включил xml ниже; Я подозреваю, что проблема есть.
EventListFragment.java
public class EventListFragment extends ListFragment implements OnClickListener, LoaderCallbacks<Cursor> { private SimpleCursorAdapter mAdapter; List strRecId = new ArrayList(); private ListAdapter lstAdapter; private Button btn_Add; List strRecord = new ArrayList(3); List strFields = new ArrayList(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // View myFragmentView = inflater.inflate(R.layout.event_list); //-----------------------------------------------------; // ALSO LOOK FOR "INITRUN" BELOW AND COMMENT OUT STATEMENT; // IN TWO PLACES; //-------------------------------------------------------; // BELOW READS FROM DATABASE AND DISPLAYS EVENTNAME; // THEN ALLOWS UPDATE OF THEM ABD INSERT FROM EXISTING; // Log.d("EventLst","X onCrt: x01 START"); String[] strItems = new String[] { EventProvider.COLUMN_EVENTNAME }; Log.d("EventLst","X onCrt: x01strI:" + strItems[0]); int[] iCnt = new int[] { R.id.text1 }; mAdapter = new SimpleCursorAdapter(getActivity(),R.layout.event_row, null, strItems, iCnt, 0); Log.d("EventLst","X onCrt: x02 START"); setListAdapter(mAdapter); getLoaderManager().initLoader(0, null, this); Log.d("EventLst","X onCrt: x03 START"); } //----> backto public void onCreate // //------------------------------------------------------- // Log.d("EventLst","X onCrt: DONE"); //--------------------------------------------------------- @Override public void onActivityCreated(Bundle savedInstanceState) //* The activity (not fragment's) onCreate() method returns and calls //* onActivityCreated() callback { super.onActivityCreated(savedInstanceState); Log.d("EventLst","S onActCrtd"); //* The ListFragment supports showing a message when the list is empty. Uses a //* value of R.string.loadingmsg - Add to strings.xml setEmptyText(getResources().getString(R.string.loadingmsg)); registerForContextMenu(getListView()); setHasOptionsMenu(true); Log.d("EventLst","X onActCrtd"); } //*--------------------------------------------------------------- //* START EDIT ACTIVITY: // user clicked in list, start edit view // startActivity (...) starts edit activity, passing id = n // where "n" is (record key) id from list @Override public void onListItemClick(ListView l,View V, int position, long id) { super.onListItemClick(l, V, position, id); Log.d("EventLst","S onLsItmCk" + ";P:" + position + ";I:" + id); long lgRecN = 0; // id is the position in the list of activities, // we will use it to get the RowId of this record in DB if (id == 1) { android.os.Process.killProcess(android.os.Process.myPid()); } if (id > 0) { String strRecN = (String) strRecId.get((int) id-1); lgRecN = Long.parseLong(strRecN); } else { lgRecN = 0; }; startActivity(new Intent(getActivity(), EventEditActivity.class) .putExtra(EventProvider.COLUMN_ROWID, lgRecN)); // Log.d("EventLst","X onLsItmCk" + ";I:" + id); } //****************************************************; //****************************************************; // This was copied precisely from: // https://stackoverflow.com/questions/6091194/how-to-handle-button-clicks-using- // the-xml-onclick-within-fragments/7969020#7969020 // then shangrd "StartButton" to btn_Exit // I had errors //@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.event_list, container, false); Log.d("EventLst","S creatrView"); Button b = (Button) v.findViewById(R.id.btn_Add); b.setOnClickListener(this); Log.d("EventLst","S onLsItmCk" + v); return v; } @Override public void onClick(View v) { Log.d("EventLst","S onclkBtn" + v); } //**************************************************; //***************************************************; @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); Log.d("EventLst","S onVwCrt"); setEmptyText(getResources().getString(R.string.loadingmsg)); registerForContextMenu(getListView()); Log.d("EventLst","X onVwCrt"); }
event_list.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:name="com.dummies.android.taskreminder.EventListFragment" > <Button android:id="@+id/btn_Add" android:layout_width="50dp" android:layout_height="30dp" android:textSize="12dp" android:padding="1dip" android:text="@string/add" /> <Button android:id="@+id/btn_Exit" android:layout_width="50dp" android:layout_height="30dp" android:textSize="12dp" android:padding="1dip" android:layout_marginLeft="5dp" android:layout_toRightOf="@+id/btn_Add" android:text="@string/exit" /> <Button android:id="@+id/btn_Other" android:layout_width="50dp" android:layout_height="30dp" android:textSize="12dp" android:padding="1dip" android:layout_marginLeft="5dp" android:layout_toRightOf="@+id/btn_Exit" android:text="@string/other" /> <fragment android:name="com.dummies.android.taskreminder.EventListFragment" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@+id/btn_Add" /> </RelativeLayout>
event_row.xml
<TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/text1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:textSize="12dp" android:padding="2dip" />
Во-первых, спасибо за ответ. Также благодаря @alex это делает его доступным для чтения. Мое продолжение не было опубликовано, поэтому я заново спрошу: XML =
Однако: с тем же XML: (android ...: OnClick = "MyButton") Пробовал это, НЕ в OnCreate, общественного недействительными MyButton (View v) { Log.d() "..";} я получаю: Java. lang.IllegalStateException: Не удалось найти метод myButton (View) в действии Так что я все еще делаю что-то неправильно! Вероятно, очень простой. Мой экран - это фрагмент с динамическим списком и теперь 3 кнопки. Я просто хочу выбрать кнопку и вызвать код - на данный момент «log.d ...;» сделает меня счастливым! – ClarkG
У меня есть к выводу, что моя проблема в том, что при нажатии элементов в моем списке, созданных «setListAdapter (lstAdapter);» может обрабатываться фрагментом, кнопка не может. Почему они разные, я не понимаю. Если нет лучшего способа, я предполагаю, что в следующую пару дней я перемещаю фрагментный код в действие. Однако, может ли кто-нибудь сказать мне, могу ли я использовать setListAdapter так же в отношении активности? – ClarkG