この質問が何度も聞かれていることは知っていますが、まだ答えが得られていません..問題は文脈にあると思います..
アイデアは、チェックボックスで項目をチェックしてから[表示]を押すと、別のcustomlistviewで選択された項目がカスタムダイアログに表示されるcustomlistviewがあるということです..
Log.i() を使用してコードをデバッグし、コードが「壊れる」場所を調べていたところ、getView() がまったく呼び出されていないことに気付きました。
OnShow.java
public class OnShow extends Activity{
private DBHelper ourHelper;
private final Context ourContext;
private SQLiteDatabase ourDatabase;
SQLiteDatabase db;
String name,quantity,price;
ListView myList;
List<ListViewItemShow> items;
View v;
public static class DBHelper extends SQLiteOpenHelper{
public DBHelper(Context context) {
super(context,"myitems", null, 1);
Log.i("DBHelper","constructor");
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.i("DBHelper","onCreate()");
db.execSQL("CREATE TABLE IF NOT EXISTS items(name VARCHAR, quantity VARCHAR, price VARCHAR);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.i("DBHelper","onUpgrade()");
db.execSQL("DROP TABLE IF EXISTS items");
onCreate(db);
}
}
public OnShow(Context c){
Log.i("OnShow","constructor");
ourContext = c;
}
public OnShow open(){
Log.i("OnShow","open()");
ourHelper = new DBHelper(ourContext);
Log.i("OnShow","open()1");
ourDatabase = ourHelper.getReadableDatabase();
Log.i("OnShow","open()2");
return this;
}
public void close(){
Log.i("OnShow","close()");
ourHelper.close();
}
public void Add(String[][] T,int i){
for(int k=0;k<i;k++){
ContentValues cv = new ContentValues();
cv.put("name", T[k][0].toString());
cv.put("quantity",T[k][1].toString());
cv.put("price",T[k][2].toString());
ourDatabase.insert("items",null,cv);
}
}
public void showItems(Context context){
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.custom_popup, null);
myList = (ListView) v.findViewById(R.id.checkedItems);
items = new ArrayList<ListViewItemOrder>();
final Cursor cr= ourDatabase.rawQuery("Select * from items", null);
int count =cr.getCount();
cr.moveToFirst();
for(Integer j=0; j< count;j++){
Log.i("---------Item"+j,""+cr.getString(cr.getColumnIndex("name"))+" "+cr.getString(cr.getColumnIndex("quantity"))+" "+cr.getString(cr.getColumnIndex("price")));
items.add(new ListViewItemOrder(){{
name = cr.getString(cr.getColumnIndex("name"));
quantity = cr.getString(cr.getColumnIndex("quantity"));
price= cr.getString(cr.getColumnIndex("price"));
}});
}
CustomListViewShowAdapter listadapter = new CustomListViewShowAdapter(context, R.layout.itemorder, items);
myList.setAdapter(listadapter);
Log.i("teme","sssssssssss");
ourDatabase.close();
}
}
CustomListViewShowAdapter.java
public class CustomListViewShowAdapter extends ArrayAdapter<Item>
{
LayoutInflater inflater;
Context context;
List<ListViewItemShow> items;
public CustomListViewShowAdapter(Context context, int textViewResourceId, List<ListViewItemShow> items) {
super(context, textViewResourceId);
this.items = items;
this.context = context;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
Log.i("CLVOA","Constructor");
}
@Override
public int getCount() {
Log.i("CLVOA","getCount()");
return items.size();
}
@Override
public Item getItem(int position) {
Log.i("Item","getItem");
return null;
}
@Override
public long getItemId(int position) {
Log.i("CLVOA","getItemId");
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
Log.i("sssssssss","sssssssssss");
final ListViewItemShow holder;
View vi=convertView;
if(vi==null){
vi = inflater.inflate(R.layout.itemshow, null);
holder = new ListViewItemShow();
holder.nametext = (TextView) vi.findViewById(R.id.nameItemShow);
holder.quantitytext = (TextView) vi.findViewById(R.id.quantityItemShow);
holder.pricetext = (TextView) vi.findViewById(R.id.priceItemShow);
vi.setTag(holder);
}else{
holder = (ListViewItemShow) vi.getTag();
}
holder.nametext.setText(""+holder.name);
holder.quantitytext.setText(""+holder.quantity);
holder.pricetext.setText(""+holder.price);
return vi;
}
}
注意:
1-リモートでデータベースに適切に接続でき、取得したアイテムを適切に表示できます
2-すでにinvalidate()とnotifyDataSetChanged()を試しました
3- Log.i() は、getView() 以外のすべてを通過していることを示しています。
4- getCount() はアイテムの正しいサイズを返します
5- showItems() のパラメータで渡されたContextは mainactivity.java のコンテキストです ... これが私の問題だと思いますが、それを修正する方法がわかりません
編集
custom_popup.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#FFFFFF"
android:orientation="horizontal"
>
<ListView
android:id="@+id/checkedItems"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginBottom="83dp" >
</ListView>
<Button
android:id="@+id/order_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_alignRight="@+id/checkedItems"
android:layout_marginTop="775dp"
android:text="Order" />
<Button
android:id="@+id/popup_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignTop="@+id/show_button"
android:text="Cancel" />
</RelativeLayout>
itemorder.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >
<TextView
android:id="@+id/nameItemShow"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginRight="33dp"
android:layout_toLeftOf="@+id/quantityItemShow"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@+id/quantityItemShow"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="310dp"
android:layout_toLeftOf="@+id/priceItemShow"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@+id/priceItemShow"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="67dp"
android:layout_toRightOf="@+id/quantityShowItem"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge" />
</RelativeLayout>