2017-03-03 81 views
0

我已經從數據庫中獲取了數據的列表視圖,但我也有其他視圖,例如listview中的按鈕,我沒有用適配器獲取,我需要隱藏在某些案例。問題是,我不知道如何獲得按鈕的ID。我試過Button button =(Button)findViewById(R.id.button),但是這返回null。任何幫助,將不勝感激。如何在列表視圖中獲取視圖的ID

MainActivity

private class GetData extends AsyncTask<Void, Void, Void> { 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     pDialog = new ProgressDialog(MainActivity.this); 
     pDialog.setMessage("Loading..."); 
     pDialog.setCancelable(false); 
     pDialog.show(); 
    } 

    @Override 
    protected Void doInBackground(Void... arg0) { 
     if (dba.new() == null) { 
      dba.insert2("updated"); 
      update(); 
     } else if (dba.new().equalsIgnoreCase("update")) { 
      String time = dba.datumPondelok(); 
      SimpleDateFormat dateFormat = new SimpleDateFormat("EEEEEEEE dd. M. yyyy"); 
      try { 
       Date date = dateFormat.parse(time); 
       Date newDate = new Date(date.getTime() + 518400000L); 

       if (new Date().after(newDate)) { 
        update(); 
       } 
      } catch (ParseException e) { 
       e.printStackTrace(); 
      } 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 
     if (pDialog.isShowing()) 
      pDialog.dismiss(); 

     String[] from = new String[]{dba.MONDAY, dba.DATE_MONDAY, dba.TUESDAY, dba.DATE_TUESDAY, dba.WEDNESDAY, dba.DATE_WEDNESDAY, 
       dba.THURSDAY, dba.DATE_THURSDAY, dba.FRIDAY, dba.DATE_FRIDAY, dba.HOD_MONDAY, dba.HOD_TUESDAY, dba.HOD_WEDNESDAY, dba.HOD_THUSDAY, dba.HOD_FRIDAY}; 
     ListAdapter rateAdapter = new SimpleAdapter(
       MainActivity.this, dba.giveList("1"), R.layout.list, from, to); 
     ((SimpleAdapter) rateAdapter).setViewBinder(new MyBinder()); 
     lv.setAdapter(rateAdapter); 
    } 
    } 

    class MyBinder implements SimpleAdapter.ViewBinder { 
    @Override 
    public boolean setViewValue(View view, Object data, String textRepresentation) { 
     if (view.getId() == R.id.ratingMonday || view.getId() == R.id.ratingTuesday || view.getId() == R.id.ratingWednesday 
       || view.getId() == R.id.ratingThursday || view.getId() == R.id.ratingFriday) { 
      String stringval = (String) data; 
      float ratingValue = Float.parseFloat(stringval); 
      RatingBar ratingBar = (RatingBar) view; 
      ratingBar.setRating(ratingValue); 
      return true; 
     } 
     return false; 
    } 
    } 

activity_main.xml中

<ListView 
    android:id="@+id/listview" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" /> 

list.xml

<TextView 
    android:id="@+id/datumMonday" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:paddingTop="60dp" 
    android:textStyle="bold" 
    android:textSize="10pt"/> 

    <TextView 
    android:id="@+id/monday" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:clickable="true" /> 
    <View style="@style/Divider"/> 
    <TextView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:text="@string/mine"/> 
    <RatingBar 
    android:id="@+id/ratingMonday" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:numStars="5" 
    android:stepSize="1" 
    android:rating="0" /> 

    <Button 
    android:text="@string/send" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:onClick="onClick" 
    android:id="@+id/buttonMonday" /> 
    <View style="@style/Divider"/> ......... 
+0

採取請添加適配器代碼 –

+0

@amryousef,我使用的適配器onPostExecute方法來獲取textviews和ratingbars – Maros1515

回答

0

要使用必須聲明和初始化之外您的適配器簡單的適配器訪問按鈕AsyncTask然後添加代碼來填充您的數據到您的列表中,並致電notifyDataSetChanged()在您的postExecute()方法。

此代碼是從here

SimpleAdapter k=new SimpleAdapter(this,val1,R.layout.mytask,new String[]{"a","c","b"},new int[]{R.id.View1,R.id.View2,R.id.ViewStatus}) { 

@Override public View getView (int position, View convertView, ViewGroup parent) { 
View v = super.getView(position, convertView, parent); 
Button b=(Button)v.findViewById(R.id.mytask); 
b.setOnClickListener(new OnClickListener() { 
@Override public void onClick(View arg0) { 
// TODO Auto-generated method stub Toast.makeText(MainActivity.this,"save",Toast.LENGTH_SHORT).show(); 
} 
}); 
return v; 
} 
}; 
+0

非常感謝,這正是我所需要的答案。 – Maros1515

+0

不客氣:) –

+0

@ Maros1515如果這個答案幫助你,請把它標記爲答案。 –

相關問題