2016-05-04 32 views
-5

我已經創建了兩個XML文件,以及3排我的自定義視圖populatemy的ListView,2個首創的文字,最後一個按鈕來刪除數據:無法從sqlite的

活動的XML:

<ListView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/listView" /> 

listpoids.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" > 

    <TextView 
     android:id="@+id/textViewDate" 
     android:layout_gravity="center" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="TextView" /> 

    <TextView 
     android:layout_gravity="center" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="New Text" 
     android:id="@+id/textViewPoids" /> 

    <Button 
     android:layout_gravity="center" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Supprimer" 
     android:id="@+id/buttonSupprimer" /> 

</LinearLayout> 

我做了我adaper:

public class PoidsAdapter extends ArrayAdapter<String> { 
    private Context mContext; 
    private List<String> mListPoids; 

    public PoidsAdapter(Context context, int resource, List<String> objects) { 
     super(context, resource, objects); 
     this.mContext = context; 
     this.mListPoids = objects; 
    } 


    @Override 
    public int getCount() { 
     return mListPoids.size(); 
    } 

    @Override 
    public String getItem(int position) { 
     return mListPoids.get(position); 
    } 

    @Override 
    public View getView(final int position, View view, final ViewGroup parent) { 
     final holder holder; 
      LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      view = inflater.inflate(R.layout.listpoids, null); 
      holder = new holder(); 
      holder.mTvTitle = (TextView) view.findViewById(R.id.textViewDate); 
      holder.mTvMediaName = (TextView) view.findViewById(R.id.textViewPoids); 
      holder.mImageUrl = (Button) view.findViewById(R.id.buttonSupprimer); 
    return view; 
    } 

    public class holder { 
     public Button mImageUrl; 
     public TextView mTvTitle; 
     public TextView mTvMediaName; 
    } 
} 

和數據庫處理程序來獲取所有的行:

public List<Poids> getAllPoids() { 


     SQLiteDatabase db = this.getReadableDatabase(); 
     ArrayList<Poids> poidsList = new ArrayList<Poids>(); 

     Cursor cursor = db.rawQuery("SELECT * from " + TABLE_POIDS, 
       new String[] {}); 
/* 
     List<Poids> poidsList = new ArrayList<Poids>(); 
     // Select All Query 
     String selectQuery = "SELECT * FROM " + TABLE_POIDS; 

     SQLiteDatabase db = this.getWritableDatabase(); 
     Cursor cursor = db.rawQuery(selectQuery, null); 
*/ 
     // looping through all rows and adding to list 
     if (cursor.moveToFirst()) { 
      do { 
       Poids poid = new Poids(); 
       poid.setPoids(Integer.parseInt(cursor.getString(1))); 
       poid.setDate_enr(cursor.getString(2)); 
       // Adding contact to list 
       poidsList.add(poid); 
      } while (cursor.moveToNext()); 
     } 

     // return contact list 
     return poidsList; 
    } 

要完成我怎麼稱呼它:

db.getAllPoids(); 
    List<Poids> poids = db.getAllPoids(); 

    ListView listView=(ListView) view.findViewById(R.id.listView); 

    newData = new ArrayList<String>(); 

    for (Poids val : poids) { 

     newData.add(val.getDate_enr()); 
     newData.add(String.valueOf(val.getPoids())); 
     //String log = "Id: " + val.getId() + " ,Date: " + val.getDate_enr() + " ,Poids: " + val.getPoids() + " ,Evolution: " + val.getEvolution() ; 
     // Writing Contacts to log 
     //Log.d("Name: ", log); 
    } 

    PoidsAdapter mAdapter = new PoidsAdapter(getActivity(), R.layout.listpoids, newData); 
    listView.setAdapter(mAdapter); 

但它不工作,我在一個片段。

UPDATE:

@Override 
public View getView(final int position, View view, final ViewGroup parent) { 
    final ViewHolder holder; 
     LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     view = inflater.inflate(R.layout.listpoids, null); 
     holder = new ViewHolder(); 
     holder.mTvTitle = (TextView) view.findViewById(R.id.textViewDate); 
     holder.mTvMediaName = (TextView) view.findViewById(R.id.textViewPoids); 
     holder.mImageUrl = (Button) view.findViewById(R.id.buttonSupprimer); 
    final Poids poids = mListPoids.get(position); 
     holder.mTvTitle.setText(poids.getDate_enr().toString()); 
     holder.mTvMediaName.setText(String.valueOf(poids.getPoids()).toString()); 

    return view; 
} 

我覺得這裏的錯誤是beceuse我看到了兩行,但在setAdapter或類似這樣的東西,這裏失去了一些東西,我認爲:

public class MonPoidsFragment extends Fragment { 

    DatabaseHandler db = new DatabaseHandler(getActivity()); 

    public MonPoidsFragment(){} 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     //View rootView = inflater.inflate(R.layout.accueil_activity, container, false); 
     View view = inflater.inflate(R.layout.monpoids_activity, container, false); 

     db = new DatabaseHandler(getActivity()); 

     db.getAllPoids(); 
     List<Poids> poids = db.getAllPoids(); 

     ListView listView=(ListView) view.findViewById(R.id.listView); 

     PoidsAdapter mAdapter = new PoidsAdapter(getActivity(), R.layout.listpoids, poids); 
     listView.setAdapter(mAdapter); 
     return view; 
    } 

    public Cursor getDetails() { 
     return db.getReadableDatabase().query("Poids ", null, null, null, null, null, null); 
     //This will return all data in your table. 
    } 
} 

數據庫助手:

// Getting All Contacts 
public List<Poids> getAllPoids() { 
    List<Poids> poidsList = new ArrayList<Poids>(); 
    // Select All Query 
    String selectQuery = "SELECT * FROM " + TABLE_POIDS; 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 

    // looping through all rows and adding to list 
    if (cursor.moveToFirst()) { 
     do { 
      Poids poid = new Poids(); 
      poid.setPoids(Integer.parseInt(cursor.getString(1))); 
      poid.setDate_enr(cursor.getString(2)); 
      //poid.setPoids(Integer.parseInt(cursor.getString(0))); 
      //poid.setDate_enr(cursor.getString(1)); 
      // Adding contact to list 
      poidsList.add(poid); 
     } while (cursor.moveToNext()); 
    } 

    // return contact list 
    return poidsList; 
} 
+0

你能描述更多什麼不起作用嗎?沒有顯示結果?要麼 ... ? –

+0

@ccsnoopy我有listpoids.xml顯示,所以2 textview與「TextView」作爲值和按鈕,就像如果lstview只顯示xml文件 – BJM

+0

listview的孩子將填充您的適配器,爲什麼你有2 textview和按鈕作爲listview的孩子? – drulabs

回答

1

你實際上沒有給TextView分配任何東西,除了屁股點擊持有者查看getView()中的組件,您還需要爲它們賦值。

實施例:

@Override 
public View getView(final int position, View view, final ViewGroup parent) { 
    final holder holder; 
     LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     view = inflater.inflate(R.layout.listpoids, null); 
     holder = new holder(); 
     holder.mTvTitle = (TextView) view.findViewById(R.id.textViewDate); 
     holder.mTvMediaName = (TextView) view.findViewById(R.id.textViewPoids); 
     holder.mImageUrl = (Button) view.findViewById(R.id.buttonSupprimer); 
     holder.mTvTitle.setText("something you need to assign from some data"); 
     holder.mTvMediaName.setText("this as well.."); 
return view; 
} 

此外,無關的問題,因爲膨脹的觀點是一個昂貴的過程,應先檢查是否您膨脹之前View已經充氣。

你可以檢查這個:http://lucasr.org/2012/04/05/performance-tips-for-androids-listview/

+0

工作,但我只有一個值:( – BJM

+0

可以請你更新你的代碼? –

+0

編輯請看 – BJM