2015-05-29 8 views
5

हाल ही में मैं एक ऑनलाइन आधारित छात्र शिक्षक संचार आवेदन पर काम कर रहा हूं। इस ऐप में एक हिस्सा है कि छात्र को शिक्षक को अपनी कक्षा में जोड़ने का अनुरोध भेजना होगा।लिस्टव्यू बटन नाम कैसे बदलें कस्टम एडाप्टर क्लास के अंदर सर्वर अनुरोध भेजने के बाद?

enter image description here

यहाँ कस्टम एडाप्टर getView कोड मैं कहाँ सूचीदृश्य custiom बटन का उपयोग करके अनुरोध भेज रहा है। मैं इस एडाप्टर कक्षा के अंदर asynctask कोड रखना चाहता हूँ। लेकिन मैं ऐसा करने में सक्षम नहीं हो सकता। सूचीदृश्य ऑनक्लिक बटन विधि के अंदर asynctask विधि को पहचान नहीं सकता है। तो मैंने एक और वर्ग में asynctask विधि रखा। मैं इस एडाप्टर क्लास में एसिंटास्क विधि रखना चाहता हूं क्योंकि मैं बटन नाम "अनुरोध" पर पर अनुरोध भेजने के बाद पोस्ट करें विधि। मैंने मैन्युअल रूप से बटन नाम बदल दिया है, लेकिन मैं यह सुनिश्चित करना चाहता हूं कि उपयोगकर्ता 100% भेजा गया हो। तो कृपया मुझे बताएं कि मुझे इस एडाप्टर क्लास में एसिन्टास्क विधि कहां रखना है ताकि मैं बटन का नाम बदल सकूं। अग्रिम में लाख धन्यवाद।

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; 

    } 
} 

उत्तर

1

का उपयोग मैं एक कॉलबैक के माध्यम से इस समस्या को हल करने के लिए आप की सिफारिश करेंगे।

ऐसा करने के लिए, एक इंटरफ़ेस बनाएं (उदा। RequestStatusCallback) जिसमें RequestSended पर विधि शामिल है।

  1. अब SubjectAdapter इस इंटरफेस को लागू करते हैं। -> onRequestSended() बटन की उपस्थिति को बदलता है।

  2. SendRequest में एक ctor बनाएँ, जो RequestStatusCallback उदाहरण की अपेक्षा करता है। इसे इंस्टेंस वैरिएबल के रूप में सहेजें।

  3. यदि SendRequest ने सफलतापूर्वक अनुरोध भेज दिया है, तो कॉलबैक की ऑनक्व्यूएंडेड विधि को कॉल करें।

इसलिए, अगर अनुरोध भेज दिया गया है, तो बटन अपडेट हो जाएगा। अब आप "onRequestFailed()" और अन्य पर कॉलबैक जोड़ सकते हैं ...

+0

नंबर 2 में सीटीओआर क्या है? – Yeahia2508

+0

कस्टम कन्स्ट्रक्टर -> SendRequest (RequestStatusCallback कॉलबैक) {this.callback = कॉलबैक; } –

0

एक और संपत्ति जोड़ें contactList कहना buttonText के लिए buttonText

डिफ़ॉल्ट टेक्स्ट "अनुरोध", क्लिक करें परिवर्तन पर कि "भेजें" करने के लिए हो सकता है और notifyDataSet फोन() होगा;

+0

यदि सर्वर अनुरोध विफल रहता है तो क्या होगा? –

1

उपयोग की तुलना में आइटम clickListener पर वेब सेवा की प्रतिक्रिया पर बस इन

holder.btSendRequest.setText("Sent") 
2

मुझे लगता है कि आप एंड्रॉइड में नए हैं। यह अच्छा समाधान नहीं है लेकिन यह आपकी मदद करेगा। अनुरोध बटन के बाद आप एडाप्टर क्लास में 3 सेकंड के लिए थ्रेड सेट करें और अपनी प्रोजेक्ट में isSend() नामक ध्वज बनाएं। अपने भेजने asynctask onpost() विधि में ध्वज बदलें। अपने धागे में ध्वज की जांच करने से। आशा है इससे आपकी मदद होगी।

संबंधित मुद्दे