2017-04-20 40 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

我已经用完整的代码更新了这篇文章。 –