2013-04-19 4 views
-1

Этот код работает до тех пор, пока я не получу список событий. Выберите один и перейдите к деталям, и я могу обновить и т. Д., И я вернусь в свой список. Первый элемент становится кнопкой «ДОБАВИТЬ», а второй элемент становится функцией «Выход». Но я хочу настоящих кнопок.Как заставить кнопки работать?

Я добавил реальные кнопки, и после попыток код, предназначенный для обработки реальных кнопок, либо имеет ошибки, либо просто падает. Моя последняя копируется непосредственно с этого сайта:

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" /> 

ответ

0

Я не получил то, что вы действительно хотите, но я предполагаю, что у вас есть проблема с нажатием кнопки? если я прав. вы можете использовать один из этих способов.

1- в макете добавить этот простой код вашей кнопки

android:onClick="MyButton" 

и в вас классе добавить

public void MyButton(View v) { 
// you may want to perform your clicks here. 
} 

2- вы можете использовать непосредственно из вашего класса

MyButtonId.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
     // you may want to perform your clicks here. 

     } 
    }); 
+0

Во-первых, спасибо за ответ. Также благодаря @alex это делает его доступным для чтения. Мое продолжение не было опубликовано, поэтому я заново спрошу: XML =

+0

Однако: с тем же XML: (android ...: OnClick = "MyButton") Пробовал это, НЕ в OnCreate, общественного недействительными MyButton (View v) { Log.d() "..";} я получаю: Java. lang.IllegalStateException: Не удалось найти метод myButton (View) в действии Так что я все еще делаю что-то неправильно! Вероятно, очень простой. Мой экран - это фрагмент с динамическим списком и теперь 3 кнопки. Я просто хочу выбрать кнопку и вызвать код - на данный момент «log.d ...;» сделает меня счастливым! – ClarkG

+0

У меня есть к выводу, что моя проблема в том, что при нажатии элементов в моем списке, созданных «setListAdapter (lstAdapter);» может обрабатываться фрагментом, кнопка не может. Почему они разные, я не понимаю. Если нет лучшего способа, я предполагаю, что в следующую пару дней я перемещаю фрагментный код в действие. Однако, может ли кто-нибудь сказать мне, могу ли я использовать setListAdapter так же в отношении активности? – ClarkG

Смежные вопросы