2013-03-21 3 views
0

웹 서비스에서 JSON으로 데이터를 가져온 다음 데이터를 사용자 정의 ListView에 넣습니다.notifyDataSetChanged가 작동하지 않습니다.

ListView 항목을 클릭하면 새로운 Activity이 열립니다. 지금은

나는 ListView 다시 연락

, 내가

전에 클릭하는을 listitem의 텍스트를 변경하려면, 내가 같은 ListView로 돌아가이 활동의 ​​"Submit"버튼을 클릭 활동을 새로 고치거나 다시 호출하려는 경우 listticket.java

지금은 데이터가 정적입니다. 나는 웹 서비스를 사용했다.

listticket.java

public class listticket extends Activity { 

    static ListView listView; 

    ArrayList<String> aryTicket = new ArrayList<String>(); 

    private String[] listArr = { "A", "B" }; 

    private String[] listStatus = { "Alert", "Alert" }; 
    private String[] listTicketid = { "1", "2" }; 

    ArrayList<String> ary_ticket_code = new ArrayList<String>(); 

    ArrayList<String> ary_address = new ArrayList<String>(); 
    ArrayList<String> ary_ticketid = new ArrayList<String>(); 

    public static ArrayList<String> ary_status = new ArrayList<String>(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.listticket); 

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

     // filllistdata(); 

     listArr = new String[ary_ticket_code.size()]; 
     listArr = ary_ticket_code.toArray(listArr); 

     listStatus = new String[ary_status.size()]; 
     listStatus = ary_status.toArray(listStatus); 

     listTicketid = new String[ary_ticketid.size()]; 
     listTicketid = ary_ticketid.toArray(listTicketid); 

     MyArrayAdapter adapter = new MyArrayAdapter(this, listArr); 
     listView.setAdapter(adapter); 

    } 

    @Override 
    protected void onResume() { 
     // TODO Auto-generated method stub 
     super.onResume(); 

     ary_status.set(0, "Work Done"); 
     ((MyArrayAdapter) listView.getAdapter()).notifyDataSetChanged(); 

    } 

    public class MyArrayAdapter extends ArrayAdapter<String> { 

     Activity context; 
     String[] listArr; 

     private TextView btnchkout; 

     // private final integer[] image; 

     public MyArrayAdapter(Activity context, String[] objects) { 
      super(context, R.layout.ticket, objects); 
      // TODO Auto-generated constructor stub 
      this.context = context; 
      listArr = objects; 

     } 

     @Override 
     public View getView(final int position, View convertView, 
       ViewGroup parent) { 
      // TODO Auto-generated method stub 

      LayoutInflater inflater = (LayoutInflater) getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
      View view = inflater.inflate(R.layout.ticket, null, true); 

      TextView textView = (TextView) view.findViewById(R.id.txtTicketNo); 
      textView.setText(listArr[position]); 

      final TextView txtAlert = (TextView) view 
        .findViewById(R.id.txtAlert1); 
      // Toast.makeText(getApplicationContext(), listStatus[position], 
      // Toast.LENGTH_LONG).show(); 
      String statusCheck = listStatus[position].toString().trim(); 

      if (statusCheck.equals("Alert") == true) { 
       txtAlert.setText(statusCheck); 
       txtAlert.setTextColor(getResources().getColor(R.color.red)); 

      } else if (statusCheck.equals("In Progress") == true) { 
       txtAlert.setText(statusCheck); 
       txtAlert.setTextColor(getResources().getColor(R.color.view)); 

      } else if (statusCheck.equals("Work Complete Pending paperwork") == true) { 
       txtAlert.setText("Work Done"); 
       txtAlert.setTextColor(getResources().getColor(R.color.green)); 

      } else { 
       txtAlert.setText(statusCheck); 
       // txtAlert.setTextColor(getResources().getColor(R.color.defaulttextcolor)); 
      } 

      final TextView btntextView = (TextView) view 
        .findViewById(R.id.btnCheckin); 

      if (statusCheck.equals("In Progress")) { 
       Drawable d = getResources().getDrawable(R.drawable.btncheckin); 
       btntextView.setBackgroundDrawable(d); 
      } 

      btnchkout = (TextView) view.findViewById(R.id.btnCheckout); 

      btnchkout.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 

        Intent intent = new Intent(listticket.this, 
          ticket_detail.class); 
        startActivity(intent); 

       } 
      }); 

      return view; 
     } 
    } 

} 

세계적 때을 ListItem

에 클릭

ticketdetail.java

protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.ticket_detail); 



     btnSubmit = (TextView) findViewById(R.id.btnSubmit); 


     btnSubmit.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 

        new AsyncAction().execute(null,null,null); 


       //onBackPressed(); 
      } 
     }); 
    } 

    private class AsyncAction extends AsyncTask<String, Void, String> 
    { 
     public boolean status=false; 
     private ProgressDialog pd; 
     @Override 
     protected String doInBackground(String... arg0) 
     { 
      // TODO Auto-generated method stub 
      try 
       { 

      } 
       catch (Exception e) 
       { 
       // TODO: handle exception 
      } 

      return null; 
     } 

     @Override 
     protected void onPostExecute(String result) 
     { 

      pd.dismiss(); 
      Intent intent = new Intent(ticket_detail.this,listticket.class); 
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
      startActivity(intent); 
      //finish(); 

     } 

     protected void onPreExecute() 
     { 
      // TODO Auto-generated method stub 
      super.onPreExecute(); 
      pd = new ProgressDialog(ticket_detail.this); 
      pd.setMessage("Please Wait ..."); 
      pd.setIndeterminate(true); 
      pd.setCancelable(false); 
      pd.show(); 
     } 

    } 

     @Override 
     public boolean onKeyDown(int keyCode, KeyEvent event) { 
      if (keyCode == KeyEvent.KEYCODE_BACK) { 
       Intent a = new Intent(ticket_detail.this,listticket.class); 
       a.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       startActivity(a); 
       finish(); 

       return true; 
      } 
      return super.onKeyDown(keyCode, event); 
     } 
+0

당신의 getView'사용되고 있지 않은 onResume() '' '에 ary_status'의 값을 변경()'.. –

답변

0

만들기 어댑터 개체의 또 다른 레이아웃과 내부 onCreate 및 내에서 한 번 초기화 onResume() 통지 O 어댑터 아래 같은 :

Delcaration

MyArrayAdapter 어댑터;

onCreate

adapter = new MyArrayAdapter(this, listArr); 
listView.setAdapter(adapter); 

onResume()

adapter.notifyDataSetChanged();

0

이것을 사용하면 notifyDataSetChanged 호출을 추가, 제거 및 제거 할 수 있으며 값 비싼 정보를 새로 고칠 때마다 어댑터를 변경하지 않아도됩니다.

adapter.clear() 

for (Object o : object) 
    adapter.add(o) 
관련 문제