Как изменить имя списка Listview После отправки запроса сервера внутри пользовательского класса адаптера?

Недавно я работаю над онлайн-приложением для студентов-студентов. В этом приложении есть часть, которую Студент должен отправить преподавателю для добавления в свой класс.

Введите описание изображения здесь

Вот код getView пользовательского адаптера, где я отправляю запрос с помощью кнопки listview custiom. Я хочу разместить асинтезный код внутри этого класса адаптера. Но я не могу этого сделать. Внутри метода listview onclick кнопка не может распознать метод asynctask. Поэтому я поместил метод asynctask в другой класс. Я хочу поместить метод asyntask в этот класс адаптера, потому что я хочу изменить имя кнопки «Запрос» на «Отправлено» после отправки запроса в методе onPostExecute . Я вручную изменил имя кнопки, но хочу, чтобы пользователь, запрос которого отправлен на 100%. Поэтому, пожалуйста, скажите мне, где я должен поместить метод asynctask в этот класс адаптера, чтобы изменить имя кнопки. Миллион Спасибо в 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; } } 

Я бы рекомендовал вам решить эту проблему с помощью обратного вызова.

Для этого создайте интерфейс (например, RequestStatusCallback), который содержит метод onRequestSended.

  1. Теперь пусть SubjectAdapter реализует этот интерфейс. -> onRequestSended () изменяет внешний вид кнопки.

  2. Создайте ctor в SendRequest, который ожидает экземпляр RequestStatusCallback. Сохраните его как переменную экземпляра.

  3. Если SendRequest успешно отправил запрос, вызовите метод обратного вызова onRequestSended.

Поэтому, только если запрос был отправлен, кнопка будет обновлена. Теперь вы можете добавить дополнительные обратные вызовы, такие как «onRequestFailed ()» и так далее …

Я думаю, что вы новичок в андроиде. Это нехорошее решение, но это поможет вам. После кнопки запроса Задайте поток в течение 3 секунд в своем классе адаптера и сделайте в проекте проект с именем isSend (). Измените флаг в отправляемом asynctask методе onpost (). Чем проверить флаг в своем потоке. Надеюсь, это поможет вам.

В ответ на веб-службу на элемент clickListener, чем использование, просто используйте эти

 holder.btSendRequest.setText("Sent") 

Добавить другое свойство в contactList say buttonText

Текст по умолчанию для buttonText будет «Request», при изменении клика, чтобы «отправить» и вызвать notifyDataSet ();