2015-05-29 25 views
5

Gần đây tôi đang làm việc trên một ứng dụng truyền thông Giáo viên Sinh viên dựa trên trực tuyến. Trong ứng dụng này có một phần mà Học sinh phải gửi cho giáo viên một yêu cầu để thêm vào lớp học của mình.Làm thế nào để thay đổi tên nút Listview Sau khi gửi yêu cầu máy chủ bên trong một lớp bộ điều hợp tùy chỉnh?

enter image description here

Đây là mã Tuỳ chỉnh Adaptor getView nơi mà tôi đang gửi yêu cầu bằng cách sử dụng nút listview custiom. Tôi muốn đặt mã asynctask bên trong lớp bộ điều hợp này. Nhưng tôi không thể làm điều đó. Bên trong listview phương thức onclick button không thể nhận ra phương thức asynctask. vì vậy tôi đã đặt phương thức asynctask vào một lớp khác. Tôi muốn đặt phương pháp asyntask trong lớp bộ điều hợp này vì tôi muốn thay đổi tên nút "Yêu cầu" thành "Đã gửi" sau khi gửi yêu cầu theo phương thức onPostExecute. Tôi đã thay đổi tên nút theo cách thủ công nhưng tôi muốn đảm bảo rằng người dùng yêu cầu được gửi 100%. Vì vậy, hãy cho tôi biết nơi tôi phải đặt phương pháp asynctask trong lớp bộ điều hợp này để tôi có thể thay đổi tên nút. Triệu Thanks in Advance.

package project.cc.student; 
import java.util.ArrayList; 
import org.apache.http.NameValuePair; 
import org.apache.http.message.BasicNameValuePair; 
import com.example.connectifyclassroom.R; 
import android.content.Context; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.Toast; 

public class SubjectAdapter extends ArrayAdapter<Subject> { 
    ArrayList<Subject> contactList; 
    LayoutInflater vi; 
    int Resource; 
    ViewHolder holder; 
    int studentID; 
    SendRequest sendRequest; 
    String requestUrl; 
    ArrayList<NameValuePair> params; 
    public SubjectAdapter(Context context, int resource, ArrayList<Subject> objects,int studentID) { 
     super(context, resource, objects); 
     vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     Resource = resource; 
     contactList = objects; 
     this.studentID = studentID; 
     Log.d("bug", "studentID" + studentID); 
     params = new ArrayList<NameValuePair>(); 

    } 
     @Override 
     public View getView(final int position, View convertView, ViewGroup parent) { 
      // convert view = design 
      View v = convertView; 
      if (v == null) { 
       holder = new ViewHolder(); 
       v = vi.inflate(Resource, null); 
       holder.tvSubject = (TextView) v.findViewById(R.id.tvSujectName); 
       holder.tvTeacher = (TextView) v.findViewById(R.id.tvTeacherName); 
       holder.btSendRequest = (Button) v.findViewById(R.id.bt_send_subject_request); 
       holder.btSendRequest.setOnClickListener(new Button.OnClickListener() { 

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

         Integer pos = (Integer)view.getTag(); 
         Button b = (Button) view; 
         sendRequest = new SendRequest(); 
         Toast.makeText(getContext(),"Please Wait...", Toast.LENGTH_SHORT).show(); 

         params.add(new BasicNameValuePair("studentID", Integer.toString(studentID))); 
         params.add(new BasicNameValuePair("teacherID", Integer.toString(contactList.get(pos).getTeacherUid()))); 
         params.add(new BasicNameValuePair("subjectID", Integer.toString(contactList.get(pos).getSubjectUid()))); 
         sendRequest.setPair(params); 
         sendRequest.startRequest(); 
         Toast.makeText(getContext(),"Request Sent", Toast.LENGTH_SHORT).show(); 
         b.setText("Sent"); 



        } 
       }); 
       v.setTag(holder); 
      } else { 
       holder = (ViewHolder) v.getTag(); 
      } 

     holder.tvSubject.setText(contactList.get(position).getSubject()); 
     holder.tvTeacher.setText(contactList.get(position).getTeacher()); 
     holder.btSendRequest.setTag(position); 

     return v; 

    } 

    static class ViewHolder { 
     public TextView tvSubject; 
     public TextView tvTeacher; 
     public Button btSendRequest; 

    } 
} 

Trả lời

1

Tôi muốn giới thiệu bạn để giải quyết vấn đề này thông qua một callback.

Để thực hiện việc này, hãy tạo Giao diện (ví dụ: RequestStatusCallback) chứa phương thức onRequestSended.

  1. Bây giờ hãy để SubjectAdapter triển khai giao diện này. -> onRequestSended() thay đổi giao diện của nút.

  2. Tạo một ctor trong SendRequest, dự kiến ​​phiên bản RequestStatusCallback. lưu nó dưới dạng biến Instance.

  3. nếu SendRequest đã gửi yêu cầu thành công, hãy gọi phương thức onRequestSended của cuộc gọi lại.

vì vậy, chỉ khi yêu cầu đã được sửa đổi, nút sẽ được cập nhật. bây giờ bạn có thể thêm các cuộc gọi lại khác như "onRequestFailed()" và cứ thế ...

+0

ctor ở số 2 là gì? – Yeahia2508

+0

hàm tạo tùy chỉnh -> SendRequest (RequestStatusCallback gọi lại) {this.callback = callback; } –

0

Thêm bất động sản khác để contactList nói buttonText

văn bản mặc định cho buttonText sẽ là "Yêu cầu", về biến đổi nhấp chuột đó để "gửi" và gọi notifyDataSet();

+0

Điều gì xảy ra nếu yêu cầu máy chủ không thành công? –

1

Trên đáp ứng của dịch vụ Web trên clickListener mục hơn sử dụng chỉ cần sử dụng những

holder.btSendRequest.setText("Sent") 
2

Tôi nghĩ rằng bạn mới trong Android. Nó không phải là giải pháp tốt nhưng nó sẽ giúp bạn. Sau khi nút yêu cầu Đặt một chuỗi trong 3 giây trong lớp bộ điều hợp của bạn và tạo một cờ gọi là isSend() trong dự án của bạn. Thay đổi cờ trong phương thức onyn() của bạn. hơn là kiểm tra cờ trong chuỗi của bạn. Hy vọng nó sẽ giúp bạn.

Các vấn đề liên quan