У меня все еще есть проблема с простое добавление кнопки на экран и получение ее для выполнения моего кода. Прямо сейчас, я буду счастлив выбрать кнопку и получить «log, d (msg)»; работать. Проблема может быть вызвана всем моим кодом в фрагменте и/или комбинацией кнопок и списком, который я просматриваю на том же экране. Это, вероятно, очень простая проблема.Как заставить мои кнопки работать во фрагменте?
Мое приложение сначала начинается с списка прокрутки, созданного курсором из таблицы SQLite. Так что это открытый список. Выберите элемент, и я получу подробный экран, чтобы добавить, обновить или удалить. Это все работает.
Теперь я добавляю 3 кнопки над списком.
Я новичок, и книга, с которой я начал писать, создала фрагмент, поэтому экран со списком закодирован таким образом. (На экране подробно переписывается только деятельности.)
Я пробовал много вещей, но примерно три пути ниже:
В моем OnCreate метод:
"btn_Add.setOnClickListener(new View.OnClickListener()"
Как было отмечено в недавнем - ответ - Этот фрагмент выполняет OnCreate, а затем падает с этими сообщениями:
java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.dummies.android.taskreminder/com.dummies.android.
taskreminder. EventListActivity}:Binary XML file line #34: Error inflating class fragment
в качестве отдельного метода после OnCreate:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
Это вызывает цикл - повторение OnCreate несколько раз, то падает с этим:
java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.dummies.android.taskreminder/com.dummies.android.
taskreminder.EventListActivity}: android.view.InflateException:
Binary XML file line #8: Error inflating class <unknown>
3 Я добавил это в файл XML в определении кнопки:
андроида: OnClick = "MyButton "
и
public void MyButton(View v)
{
Log.d(". . . " + v);
}
Это позволило приложение для загрузки, но когда я выбрал кнопку, он разбился, когда я выбрал кнопку со следующим сообщением:
java.lang.IllegalStateException: Could not find a method MyButton(View) in the activity
Это кусочки из фрагмента: eventListFragment.java
public class EventListFragment extends ListFragment
implements LoaderCallbacks<Cursor>
{
. . . .
List strRecord = new ArrayList(3);
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
. . . .
setListAdapter(mAdapter);
getLoaderManager().initLoader(0, null, this);
)
//------------------------------------
// THIS IS EXAMPLE # 1
// java.lang.RuntimeException: Unable to start activity
// ComponentInfo{com.dummies.android.taskreminder/com.dummies.android.taskreminder.EventListActivity}:
// android.view.InflateException: Binary XML file line #34: Error inflating class fragment
btn_Add.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// you may want to perform your clicks here.
Log.d("EventLst","S create view btnAddEvent:" + v);
}
});
//-------------------------------------
} //----> END: public void onCreate
//-------------------------------------
// THIS IS EXAMPLE #2:
// it give me this error on initial load:
// java.lang.RuntimeException: Unable to start activity
// ComponentInfo{com.dummies.android.taskreminder/com.dummies.android.taskreminder.EventListActivity}:
// android.view.InflateException: Binary XML file line #8: Error inflating class <unknown>
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.event_list, container, false);
Button button = (Button) view.findViewById(R.id.btn_Add);
button.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
Activity activity = getActivity();
if (activity != null)
{
Log.d("EventLst","S create view btnAddEvent:" + v);
Toast.makeText(activity, "GOT button", Toast.LENGTH_LONG).show();
}
}
} );
return view;
}
//---------------------------------------
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor)
{
. . .
while (cursor.isAfterLast() == false)
{
strRecord.add(iRecNo, strDate + ": " + strC[2]);
}
lstAdapter = new ArrayAdapter<String>(getActivity(),
R.layout.event_row, R.id.text1, strRecord);
setListAdapter(lstAdapter);
Это основной макет: event_list.XML Примечание: андроид: OnClick = "MyButton" только в Ьгу # 3 выше
<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:onClick="MyButton"
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:onClick="onClick"
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>
Это строка для CRE съел список SCROW: 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" />
Luksprog запрашиваемую информацию в своем ответе, пожалуйста, должность или, по крайней мере, сделать доступными для него/нее.
Сначала я создал этот XML-файл, event_list_activity.XML, угадали немного на имя файла:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
Также добавлены строки:
<string name="container">EventContainer</string>
Ран мое испытание, и это полный журнал: (Первые три записи из моего кода):
04-28 16:09:24.504: D/EventLst(258): X onCrt: x01strI:eventname
04-28 16:09:24.544: D/EventLst(258): X onCrt: x02 START
04-28 16:09:24.584: D/EventLst(258): X onCrt: x03 START
04-28 16:09:24.624: D/AndroidRuntime(258): Shutting down VM
04-28 16:09:24.646: W/dalvikvm(258): threadid=3: thread exiting with uncaught exception (group=0x4001b1d8)
04-28 16:09:24.646: E/AndroidRuntime(258): Uncaught handler: thread main exiting due to uncaught exception
04-28 16:09:24.646: W/dalvikvm(258): threadid=3: thread exiting with uncaught exception (group=0x4001b1d8)
04-28 16:09:24.646: E/AndroidRuntime(258): Uncaught handler: thread main exiting due to uncaught exception
04-28 16:09:25.065: E/AndroidRuntime(258): java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.dummies.android.taskreminder/com.dummies.android.taskreminder.EventListActivity}:
android.view.InflateException: Binary XML file line #33: Error inflating class fragment
04-28 16:09:25.065: E/AndroidRuntime(258): at
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
04-28 16:09:25.065: E/AndroidRuntime(258): at
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
04-28 16:09:25.065: E/AndroidRuntime(258): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
04-28 16:09:25.065: E/AndroidRuntime(258): at
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
04-28 16:09:25.065: E/AndroidRuntime(258): at android.os.Handler.dispatchMessage(Handler.java:99)
04-28 16:09:25.065: E/AndroidRuntime(258): at android.os.Looper.loop(Looper.java:123)
04-28 16:09:25.065: E/AndroidRuntime(258): at android.app.ActivityThread.main(ActivityThread.java:4363)
04-28 16:09:25.065: E/AndroidRuntime(258): at java.lang.reflect.Method.invokeNative(Native Method)
04-28 16:09:25.065: E/AndroidRuntime(258): at java.lang.reflect.Method.invoke(Method.java:521)
04-28 16:09:25.065: E/AndroidRuntime(258): at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
04-28 16:09:25.065: E/AndroidRuntime(258): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
04-28 16:09:25.065: E/AndroidRuntime(258): at dalvik.system.NativeStart.main(Native Method)
04-28 16:09:25.065: E/AndroidRuntime(258): Caused by: android.view.InflateException: Binary XML file line #33:
Error inflating class fragment
04-28 16:09:25.065: E/AndroidRuntime(258): at
android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:582)
04-28 16:09:25.065: E/AndroidRuntime(258): at android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
04-28 16:09:25.065: E/AndroidRuntime(258): at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
04-28 16:09:25.065: E/AndroidRuntime(258): at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
04-28 16:09:25.065: E/AndroidRuntime(258): at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
04-28 16:09:25.065: E/AndroidRuntime(258): at
com.android.internal.policy.impl.WimmWindow.setContentView(WimmWindow.java:181)
04-28 16:09:25.065: E/AndroidRuntime(258): at android.app.Activity.setContentView(Activity.java:1622)
04-28 16:09:25.065: E/AndroidRuntime(258): at
com.dummies.android.taskreminder.EventListActivity.onCreate(EventListActivity.java:22)
04-28 16:09:25.065: E/AndroidRuntime(258): at
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
04-28 16:09:25.065: E/AndroidRuntime(258): at
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
04-28 16:09:25.065: E/AndroidRuntime(258): ... 11 more
04-28 16:09:25.065: E/AndroidRuntime(258): Caused by: java.lang.NullPointerException
04-28 16:09:25.065: E/AndroidRuntime(258): at
com.dummies.android.taskreminder.EventListFragment.onCreate(EventListFragment.java:98)
04-28 16:09:25.065: E/AndroidRuntime(258): at
android.support.v4.app.Fragment.performCreate(Fragment.java:1437)
04-28 16:09:25.065: E/AndroidRuntime(258): at
android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:877)
04-28 16:09:25.065: E/AndroidRuntime(258): at
android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1066)
04-28 16:09:25.065: E/AndroidRuntime(258): at
android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1168)
04-28 16:09:25.065: E/AndroidRuntime(258): at
android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:280)
04-28 16:09:25.065: E/AndroidRuntime(258): at
android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:558)
Далее я добавил ваши заявления ниже и получить ошибки ниже с начала фрагмента до конца создания. Примечание. Мне также пришлось добавить: import android.support.v4.app.FragmentTransaction;
package com.dummies.android.taskreminder;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.view.LayoutInflater;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.FragmentTransaction;
//* below insures that you are using the ...v4 for version android 1.6
import android.support.v4.app.ListFragment;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.MenuItem;
import android.content.ContentValues;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.Button;
import android.widget.Toast;
import android.util.Log;
public class EventListFragment extends ListFragment
implements
LoaderCallbacks<Cursor>
{
private SimpleCursorAdapter mAdapter;
List strRecId = new ArrayList();
private ListAdapter lstAdapter;
private Button btn_Add;
private Button myButton;
List strRecord = new ArrayList(3);
List strFields = new ArrayList();
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//---------------------------------------------------------------
// assuming you use FragmentActivity
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.container, new EvetListFragment());
ft.commit();
// errors above:
// For: getSupportFragmentManager()
// "The method getSupportFragmentManager() is undefined for the type EventListFragment"
// For: EvetListFragment());
// "EvetListFragment cannot be resolved to a type"
//----------------------------------------------------------------
// 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");
//---------------------------------------------------------------------------------
// I thought this set my OnClickListener. Without this code, the application runs
// but the buttons don't do anything
btn_Add.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
Log.d("EventLst","S onclkBtn2" + v);
}
} );
//-------------------------------------------------------------------------------
} //----> END: public void onCreate
Большое спасибо за вашу помощь.
Цените ответ. Я опубликую больше, но я пошел на сайт Google, который сказал, чтобы перейти к компилятору properties/java и изменить соответствие с 1.6. Результат: «Android требует соответствия уровня компилятора 5.0 или 6.0. Вместо этого« 1.7 ». ...». W/properties grayed, не может вернуться назад, ничего не запускается ... К счастью, недавняя резервная копия и не займет много времени, чтобы вернуться туда, где я был. Однако, возможно, вы уже помогли. У меня нет Activity.xml только event_row & event_List. Поскольку список, выберите из списка работал, только кнопки не удалось, я думал, что у меня есть то, что мне нужно. Поэтому я также попробую это. – ClarkG
PS: Я новичок в android, - мое первое приложение, поэтому не удивительно, что мой код плохой.Я замечаю монитор от Шарлотты, может быть, я могу купить сеанс репетиторства. Это для моего WIMMOne часы, поэтому ориентация chg, фиксированные положения и одно приложение покрывает весь маленький экран. Вот почему у меня были определенные позиции. Опять же, спасибо, будет реализовывать то, что у вас есть, и разместить больше журнала, если вы еще не решили его. Clark – ClarkG
Я отправил журнал, который вы запросили, и другие результаты вчера вечером, видимо, они не выставили его на сайт. Поскольку журнал больше, чем соответствует комментариям, я редактировал и размещал новую информацию до конца. Я ценю ваш ответ и ожидаю, что они скоро сделают его доступным. Спасибо, Кларк – ClarkG