今日の私の問題は、SimpleCursorAdapter
私が実装したカスタムに関連しています。これが私の活動onCreate()
と習慣SimpleCursorAdapter
です:
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
customSharedPreference = getSharedPreferences("myCustomSharedPrefs", Activity.MODE_PRIVATE);
editor = customSharedPreference.edit();
setContentView(R.layout.activity_1);
op = new OperationsClass(getApplicationContext());
op.open();
Cursor cursor = op.getList();
startManagingCursor(cursor);
String[] columns = new String[] { "AAA", "BBB", "CCC"};
int[] to = new int[] { R.id.entry_aaa,R.id.entry_bbb, R.id.entry_ccc};
MyCursorAdapter mAdapter = new MyCursorAdapter(this, R.layout.custom_entry, cursor, columns, to);
this.setListAdapter(mAdapter);
op.close();
}
OperationsClass
データベースを管理し、getList(
)関数はエントリのカーソルを返します。
public class MyCursorAdapter extends SimpleCursorAdapter{
private Context context;
private MyCursorAdapter here = this;
private int layout;
public MyCursorAdapter (Context context, int layout, Cursor c, String[] from, int[] to) {
super(context, layout, c, from, to);
this.context = context;
this.layout = layout;
}
@Override
public View newView(final Context context, Cursor cursor, ViewGroup parent) {
Cursor c = getCursor();
final LayoutInflater inflater = LayoutInflater.from(context);
View v = inflater.inflate(layout, parent, false);
int col1 = c.getColumnIndex("aaa");
String name1 = c.getString(col1 );
int col2 = c.getColumnIndex("bbb");
String name2 = c.getString(col2 );
int col3 = c.getColumnIndex("ccc");
int name3 = c.getInt(col3 );
final TextView text1 = (TextView) v.findViewById(R.id.entry_aaa);
final TextView text2 = (TextView) v.findViewById(R.id.entry_bbb);
final TextView text3 = (TextView) v.findViewById(R.id.entry_ccc);
text1.setText(name);
text2.setText(name2);
if (name3 == 0)
text3.setText("Not checked");
else {
text3.setText("Checked");
text3.setOnClickListener(new View.OnClickListener()
{
public void onClick(View view)
{
text3.setText("Not checked");
// Here I would like to update my DB using
// OperationsClass and the SharedPrefs,
// and refresh the ListView with the new
// text value.
}
});
}
}
return v;
}
@Override
public void bindView(View v, final Context context, Cursor c) {
// Same operations as higher
}
}
基本的に私が達成したいのはListView
、ユーザーが3番目の列をクリックしたときに更新することです。これは、値が変更されたことを意味します(クリックされたかどうか)。同時に、DBとSharedPreferences
(両方のクラスの新しいオブジェクトを作成してアプリケーションコンテキストから回復することもできますが、それはかなり重いようです)を更新したいと思います。
また、が開かれたときに1つのアクティビティで実装されたメソッドの1つをトリガーする方法があるかどうかを知りたいAlertDialog
です(同じアプリで、実際にを介してデータベースに要素を追加し、AlertDialog
それをポップしたアクティビティを作成したいupは新しいカーソルを取得し、そのリストを更新します)。