私は WIMMOne 時計用のアプリを書いています: 向きの変更はなく、小さなシンプルな画面で、Android バージョン 7 です。
初めて Android APP を実行しましたが、本によるとフラグメントがありました。しかし、フラグメントは私が扱いたくない複雑さを追加しました。
私の 2 番目のアプリも同様の構造を持っています。アイテムのリストからアイテムを選択して、詳細を表示または更新します。したがって、カーソルを読み取って配列を作成し、「setListAdapter(lstAdapter);」を呼び出しようとしています。
私はから始めました:
getLoaderManager().initLoader(0, null, this);
このエラーが発生しました:
タイプ LoaderManager のメソッド initLoader(int, Bundle, LoaderManager.LoaderCallbacks) は、引数 (int、null、PhoneListActivity) には適用されません。
だから私は彼らの提案を試しました:
getLoaderManager().initLoader(0, null, (android.app.LoaderManager.LoaderCallbacks<D>) this);
このエラーが発生しました:
タイプ LoaderManager のメソッド initLoader(int, Bundle, LoaderManager.LoaderCallbacks) が欠落しているタイプ D を参照しています
だから私はこれを試しました:
getLoaderManager().initLoader(0, null, (android.app.LoaderManager.LoaderCallbacks) this);
このエラーが発生しました:
型の安全性: タイプ LoaderManager のジェネリック メソッド initLoader(int, Bundle, LoaderManager.LoaderCallbacks) の未チェックの呼び出し initLoader(int, null, LoaderManager.LoaderCallbacks)
11未満のバージョンにこれを使用すると言われているいくつかの投稿
getSupportLoaderManager().initLoader(0, null, this);
しかし、それは私にこのエラーを与えます:
メソッド getSupportLoaderManager() は、型 PhoneListActivity に対して未定義です
アクティビティで "getLoaderManager:: を使用しないことも確認しました。
それで、私は何を間違っていますか?
- または、カーソルから読み取り、フラグメントの複雑さを作成せずにリストを作成するにはどうすればよいですか?
- インポートが不足しているだけですか?
どうもありがとう、クラーク
以下は私が現在持っているものです:
package com.wimmone.phonenos;
import android.view.Menu;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.ListActivity;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnDismissListener;
import android.database.Cursor;
import android.net.Uri;
import android.app.Application;
import android.content.Intent;
import android.database.Cursor;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.support.v4.app.LoaderManager;
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.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.Toast;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import android.os.Environment;
import com.wimm.framework.app.Dialog;
public class PhoneListActivity extends ListActivity
implements
LoaderCallbacks<Cursor>
{
private SimpleCursorAdapter mAdapter;
List strRecId = new ArrayList();
private ListAdapter lstAdapter;
String strPhoneGroup = "";
String strPhoneName = "";
String strPhoneHome = "";
String strPhoneCell = "";
String strPhoneWork = "";
private Button btn_Add;
List strRecord = new ArrayList(3);
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.phone_list_activity);
String[] strItems = new String[] {PhoneProvider.COLUMN_PHONE_NAME};
int[] iCnt = new int[] { R.id.text1 };
mAdapter = new SimpleCursorAdapter(this, R.layout.phone_row,
null, strItems, iCnt, 0);
Log.d("PHONENOS***", "X onCrt: x02 START");
setListAdapter(mAdapter);
//getLoaderManager().initLoader(0, null, this);
//getLoaderManager().initLoader(0, null, this);
getSupportLoaderManager().initLoader(0, null, this);
//-----------------------------------------------
// define add button
Button btnAdd = (Button) findViewById(R.id.btn_Add);
btnAdd.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
Log.d("PHONENOS***", "S create view btnAddEvent:");
}
} );
//-----------------------------------------------
// define Exit button
Button btnExit = (Button) findViewById(R.id.btn_Exit);
btnExit.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
Log.d("PHONENOS***", "S create view btnEXIT:");
//Toast.makeText(this, "Good bye",
//Toast.LENGTH_SHORT).show();
// Application.onTerminate();
finish();
}
} );
//-----------------------------------------------
// define EXPORT button
Button btnExport . . .
}
//===============================================================
// DATA BASE ROUTINES TO LOAD FROM CURSOR
@Override
public Loader<Cursor> onCreateLoader(int ignored, final Bundle args)
{
Log.d("EventLst","S LoadCSR");
return new CursorLoader(this, PhoneProvider.CONTENT_URI, null,
null, null, null);
// Log.d("PHONENOS***","X LoadCSR");
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor)
{
// Log.d("PHONENOS***","0 LoadFin");
int iRecNo = 0;
int RowNO = 0;
int iBuCnt = 0;
String strPath = "";
mAdapter.swapCursor(cursor);
strRecId.clear();
strRecord.clear();
strRecord.add(0, "mm-dd-yy: Event name");
cursor.moveToFirst();
Log.d("EventLst","1 LoadFin DO");
// Read from cursor and add to list
while (cursor.isAfterLast() == false)
{
iRecNo = iRecNo + 1;
// - Table has 4 columns, read them into string array: strC
String strC[] = { (cursor.getString(0)), (cursor.getString(1)),
(cursor.getString(2)), (cursor.getString(3)),
(cursor.getString(4)), (cursor.getString(5))
};
String strRowNo = (cursor.getString(0));
strPhoneGroup = (cursor.getString(1));
strPhoneName = (cursor.getString(2));
strPhoneHome = (cursor.getString(3));
strPhoneCell = (cursor.getString(4));
strPhoneWork = (cursor.getString(5));
Log.d("PHONENOS***","4 LoadCSR:" + "I:" + iRecNo + "=" + strRowNo + "N:" + strPhoneName);
// - Concatenate Group and name into one string, add to table
strRecord.add(iRecNo, strPhoneGroup + "/" + strPhoneName);
// - save record number for each event in strRecId
// - Records are sorted by date, so we need to save RowId to pass
// to edit screen
strRecId.add((cursor.getString(0)));
iBuCnt = iBuCnt + 1;
cursor.moveToNext();
} // --------------------end of while loop
//cursor.close();
lstAdapter = new ArrayAdapter<String>(this,
R.layout.phone_row, R.id.text1, strRecord);
// * Call to SetListAdapter()informs ListFragment how to fill ListView
// * here use ArrayAdapter
setListAdapter(lstAdapter);
// Log.d("EventLst","8 LoadCSR:" + "ALLDONE");
}
@Override
public void onLoaderReset(Loader<Cursor> loader)
// This is called when the last Cursor provided to onLoadFinished() above
// is about to be closed
{
// Log.d("EventLst","x LoadRst");
// INITRUN REMOVE BELOW
mAdapter.swapCursor(null);
}
}