NotifyDatasetchAnged () не обновляется ListView после введения данных через диалогAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 NotifyDatasetchAnged () не обновляется ListView после введения данных через диалог

Сообщение Anonymous »

Я хочу обновить экран, используя notifydatasetchanged. Но я не буду запускать это. < /P>
Данные входят в БД. Но экран не меняется. Когда я попробую еще раз, < /p>
изменяется. Я думаю, что проблема заключается в ситуации, в которой она работает. Когда < /p>
я должен начать? Я ввел данные в диалоговом окне. И notifydatasetchanged был выполнен в Asynctask. < /H2>
public class MainActivity extends AppCompatActivity {
private Spinner spinner;
private String userPassword;
private String userGender;
private String userMajor;
private String userEmail;
private AlertDialog dialog; //알림창을 보여줌
private boolean validate = false; //사용할 수 있는 회원 아이디인지 체크
private static String userID = "a";//연결하면 메인에서 아이디를 받아와야함.
private TextView userIDtext;//목록에 대한 안내가 있는 텍스트
private ListView smsNumberViewList;//전화번호가 기록되는 리스트뷰
private SmsNumberAdapter adapter;//
private List smsNumberList;

//sms등록 할떄 묻는 다이얼로그들
private Dialog smsInsertDialog;
private Button dialog_reg;
private Button dialog_cancel;
private TextView dialog_text;
private String smsNumCountCheck;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

smsNumberViewList=(ListView)findViewById(R.id.smsNumberViewList);
smsNumberList = new ArrayList();

userIDtext=(TextView)findViewById(R.id.userIDtext);
userIDtext.setText(userID+"님이 등록한 비상연럭처"); //알림 글

//adapter는 해당 List를 매칭 (각각 차례대로 매칭)
adapter = new SmsNumberAdapter(getApplicationContext(),smsNumberList);
smsNumberViewList.setAdapter(adapter);

((Button) findViewById(R.id.click)).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

//등록 버튼을 눌렀을 떄 다이얼 로그 창이 나옴.
smsInsertDialog = new Dialog(MainActivity.this);
smsInsertDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
//다이얼로그 화면 구성하기.
smsInsertDialog.setContentView(R.layout.smsinsertdialog);
dialog_reg=(Button)smsInsertDialog.findViewById(R.id.dialog_reg);
dialog_cancel=(Button)smsInsertDialog.findViewById(R.id.dialog_cancel);

dialog_reg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
/* if(smsNumberList.){
//다이얼로그 종료
smsInsertDialog.dismiss();
}*/

Response.Listener responseListener = new Response.Listener() {

@Override
public void onResponse(String response) {

// 해당 웹사이트에 접속한 뒤 특정한 response(응답)을 다시 받을 수 있도록 한다
try {
JSONObject jsonResponse = new JSONObject(response);
boolean success = jsonResponse.getBoolean("success");

// 만약 사용할 수 있는 아이디라면
if (success) {
Toast.makeText(MainActivity.this, "success", Toast.LENGTH_LONG).show();
}

// 중복체크 실패 (사용할 수 없는 아이디)
else {
Toast.makeText(MainActivity.this, "failed", Toast.LENGTH_LONG).show();
}
} catch (Exception e) {
e.printStackTrace();
}
}
};

// 실질적으로 접속할 수 있도록 생성자를 통해 객체를 만든다. (유저 ID, responseListener)
// ValidateRequest.java라는 파일을 만들어야 한다.
smsDB_Manager smsRequest = new smsDB_Manager(userID, ((EditText) findViewById(R.id.smsNum1)).getText().toString(), ((EditText) findViewById(R.id.numsName)).getText().toString(), responseListener);
RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
queue.add(smsRequest); //준비된 데이터를 받아 통신을 시작한다.
queue.start();

new BackgroundTask().execute();//등록 버튼을 누르면 리스트 스레드를 돌려서 리스트를 만들어줌.

Toast.makeText(getApplicationContext(),"등록되었습니다.",Toast.LENGTH_SHORT).show();

//다이얼로그 종료
smsInsertDialog.dismiss();

}
});

//취소하면 그냥 취소됐다는 걸 알리는 토스트창 하나 띄워주고 종료함.
dialog_cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//취소시에 종료 토스트 출력하기.
Toast.makeText(getApplicationContext(),"취소되었습니다.",Toast.LENGTH_SHORT).show();

//다이얼로그 종료
smsInsertDialog.dismiss();
}
});

//다이얼로그 화면에 보여주기
smsInsertDialog.show();

}
}
);

new BackgroundTask().execute();

}
< /code>


class BackgroundTask extends AsyncTask {
// (로딩창 띄우기 작업 3/1) 로딩창을 띄우기 위해 선언해준다.
ProgressDialog dialog = new ProgressDialog(MainActivity.this);

String target; //우리가 접속할 홈페이지 주소가 들어감

@Override
protected void onPreExecute() {
target = "http://...; //해당 웹 서버에 접속

// (로딩창 띄우기 작업 3/2)
dialog.setMessage("로딩중");
dialog.show();
} @Override
protected String doInBackground(Void... voids) {
try {

// 해당 서버에 접속할 수 있도록 URL을 커넥팅 한다.
URL url = new URL(target);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();

// 넘어오는 결과값을 그대로 저장
InputStream inputStream = httpURLConnection.getInputStream();

// 해당 inputStream에 있던 내용들을 버퍼에 담아서 읽을 수 있도록 해줌
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

// 이제 temp에 하나씩 읽어와서 그것을 문자열 형태로 저장
String temp;
StringBuilder stringBuilder = new StringBuilder();

// null 값이 아닐 때까지 계속 반복해서 읽어온다.
while ((temp = bufferedReader.readLine()) != null) {
// temp에 한줄씩 추가하면서 넣어줌
stringBuilder.append(temp + "\n");
}

// 끝난 뒤 닫기
bufferedReader.close();
inputStream.close();
httpURLConnection.disconnect(); //인터넷도 끊어줌
return stringBuilder.toString().trim();
} catch (Exception e) {
e.printStackTrace();
}

return null;
}
@Override
public void onProgressUpdate(Void... values) {
super.onProgressUpdate();
}

@Override //해당 결과를 처리할 수 있는 onPostExecute()
public void onPostExecute(String result) {
try {
// 해당 결과(result) 응답 부분을 처리
JSONObject jsonObject = new JSONObject(result);

// response에 각각의 공지사항 리스트가 담기게 됨
JSONArray jsonArray = jsonObject.getJSONArray("response"); //아까 변수 이름

int count = 0;
String userID,numsName;
String smsNum1;
while (count < jsonArray.length()) {
// 현재 배열의 원소값을 저장
JSONObject object = jsonArray.getJSONObject(count);

// 공지사항의 Content, Name, Date에 해당하는 값을 가져와라는 뜻

userID = object.getString("userID");
smsNum1 = object.getString("smsNum1");
numsName = object.getString("numsName");
// 하나의 공지사항에 대한 객체를 만들어줌
SmsNumber smsNumber = new SmsNumber(userID, smsNum1,numsName);

smsNumCountCheck=smsNum1;
//리스트에 추가해줌
smsNumberList.add(smsNumber);

adapter.notifyDataSetChanged();

count++;
}

// (로딩창 띄우기 작업 3/3)
// 작업이 끝나면 로딩창을 종료시킨다.
dialog.dismiss();

} catch (Exception e) {
e.printStackTrace();
}

}
}
}


Подробнее здесь: https://stackoverflow.com/questions/487 ... via-dialog
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Android Xamarin С# NotifyDataSetChanged из RecyclerView не работает с фрагментом
    Anonymous » » в форуме Android
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Может ли адаптер.notifyItemRangeChanged(0, itemCount) заменить адаптер.notifyDataSetChanged()?
    Anonymous » » в форуме Android
    0 Ответы
    46 Просмотры
    Последнее сообщение Anonymous
  • NotifyDataSetChanged не работает в FragmentStateAdapter с Viewpager2
    Anonymous » » в форуме Android
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Vuetify, когда диалог открывается из пункта меню. Диалог открылся, но меню все еще появляется
    Anonymous » » в форуме CSS
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Проблема введения данных SQL об апострофе [закрыто]
    Anonymous » » в форуме Javascript
    0 Ответы
    1 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»