2017-04-20 38 views
0

我想從用戶修改後的列表視圖中的Textviews中獲取數據。 所以後來在「descrec」的TextView將變更爲「已完成」行的用戶點擊從列表視圖中的Textviews中獲取數據

listView.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view,int position, long id) { 
     TextView text2 = (TextView) view.findViewById(R.id.descrec); 
     if(text2.getText().toString().equals("Selected")) 
     { 
      text2.setText(Outstanding.outDesc[(int)id]); 
     } 
     else 
     { 
      text2.setText("Selected"); 
     } 
     Log.i("you selected row number",String.valueOf(id)); 
    } 
}); 

一旦用戶完成選擇行並點擊「提交」按鈕,我應該用「選擇」字符串打印所有行在「descrec」Textview中,但它不打印任何內容。

public void submit (View view) 
{ 
    for (int i = 0; i < listView.getCount(); i++) 
    { 
     v = listView.getAdapter().getView(i, null, null); 
     TV = (TextView) v.findViewById(R.id.descrec); 
     if (TV.getText().toString().equals("Selected")) 
     { 
      //just to make sure descrec text has beeen changed somewhere 
      Log.i("descrec", (String) TV.getText()); 
     } 
     //to check the Textview anyway 
     Log.i("descrec value", (String) TV.getText()); 
    } 
} 

並打印完整行‘descrec’用戶更改爲‘選擇’之前給的TextView的原始值的結果。

這是選擇行並點擊提交按鈕後的結果。

enter image description here

這裏是完整的代碼

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_outstanding); 
     new MyAsync().execute(); 
    } 




    class MyAsync extends AsyncTask<Void, Void, Void> { 
     protected void onPreExecute() { 
      Log.i("preexcute","first"); 
      listView = (ListView)findViewById(R.id.listviewout); 
      Contactadapter2 = new contactadapter2(Outstanding.this , R.layout.rowrecord_layout); 
      listView.setAdapter(Contactadapter2); 




      BackgroundWorker Backgroundworker = new BackgroundWorker(Outstanding.this); 
      Backgroundworker.execute(type,Homescreen.userID); 
     } 

     @Override 
     protected Void doInBackground(Void... arg0) { 
      return null; 
     } 

     @Override 
     protected void onPostExecute(final Void unused) { 
      Log.i("postexcute","second"); 

      for (int i = 0; i < outrecieptID.length; i++) { 
       Log.i("test", valueOf(i) + "out of" + valueOf(outrecieptID.length)); 

       Contacts2 contacts2 = new Contacts2(Outstanding.outrecieptID[i], Outstanding.outAmount[i], Outstanding.outDesc[i]); 
       Contactadapter2.add(contacts2); 
      } 

      for(int i=0 ; i < listView.getCount() ; i++) { 
       v[i] = listView.getAdapter().getView(i, null, null); 
      } 

      listView.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> parent, View view,int position, long id) { 
        TextView text2 = (TextView) view.findViewById(R.id.descrec); 
        TV = (TextView) v[(int)id].findViewById(R.id.descrec); 
        if(text2.getText().toString().equals("Selected")) 
        { 
         text2.setText(Outstanding.outDesc[(int)id]); 
        }else 
        { 
         text2.setText("Selected"); 
         TV.setText("Selected"); 
        } 
        Log.i("you selected row number",String.valueOf(id)); 
       } 
      }); 


     } 

    } 




    public void submit (View view) 
    { 

     for (int i = 0; i < listView.getCount(); i++) { 
      // v = listView.getAdapter().getView(i, null, null); 
      TV = (TextView) v[i].findViewById(R.id.descrec); 
      if (TV.getText().toString().equals("Selected")) 
      { 
      //just to make sure descrec text has beeen changed somewhere 
       Log.i("descrec", (String) TV.getText()); 
      } 
      //to see the Textview anyway 
      Log.i("descrec value", (String) TV.getText()); 

     } 

    } 

這裏是contactadapter代碼:

public class contactadapter2 extends ArrayAdapter { 
    List list= new ArrayList(); 
    public contactadapter2(Context context, int resource) { 
     super(context, resource); 
    } 

    public void add(Contacts2 object) { 
     super.add(object); 
     list.add(object); 
    } 

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

    @Override 
    public Object getItem(int position) { 
     return list.get(position); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     View row; 
     row=convertView; 
     ContentHolder contentHolder; 
     if(row==null) 
     { 
      LayoutInflater layoutInflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      row = layoutInflater.inflate(R.layout.rowrecord_layout,parent,false); 
      contentHolder = new ContentHolder(); 
      contentHolder.recieptidout=(TextView) row.findViewById(R.id.recieptidrec); 
      contentHolder.amountout= (TextView) row.findViewById(R.id.amountrec); 
      contentHolder.descout= (TextView) row.findViewById(R.id.descrec); 




      row.setTag(contentHolder); 
     } 
     else 
     { 
      contentHolder = (ContentHolder)row.getTag(); 
     } 

     Contacts2 contacts2 = (Contacts2) this.getItem(position); 
     contentHolder.recieptidout.setText(contacts2.getrecieptidrec()); 
     contentHolder.amountout.setText(contacts2.getamountrec()); 
     contentHolder.descout.setText(contacts2.getdescrec()); 




     return row; 
    } 

    static class ContentHolder 
    { 


     TextView recieptidout,amountout,descout; 

    } 

回答

0

您應該更新的 「選擇」 文本模式。否則它不會工作。因爲當你撥打v = listView.getAdapter().getView(i, null, null)它會綁定你的數據列表中的數據。所以它會改變你在itemclick監聽器中設置的文本。

嘗試改變一些像這樣的事情,

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       TextView text2 = (TextView) view.findViewById(R.id.descrec); 
       if(text2.getText().toString().equals("Selected")) 
       { 
        text2.setText(Outstanding.outDesc[(int)id]); 
       } 
       else 
       { 
        text2.setText("Selected"); 
       } 
       Contacts2 contacts2 = parent.getAdapter().getItem(position); 
       contacts2.setdescrec(text2.getText().toString()); 
       Log.i("you selected row number",String.valueOf(id)); 
      } 
     }); 
+0

能否請您解釋一下我怎樣才能更新模型? –

+0

你可以發佈你的代碼嗎? – Krish

+0

我已經用完整的代碼更新了這篇文章。 –