마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

listview에 있는 특정 버튼을 if 조건으로 보이기, 숨기기 설정하기 질문입니다.

0 추천

안녕하세요. 안드로이드스튜디오를 공부하고 있는 학생입니다.

현재 웹에서 데이터베이스를 가져와서 리스트뷰에 값을 넣어주고 있습니다.

리스트뷰안에 현재 텍스트뷰가 3개가 들어가 있는데 

만약 데이터베이스에서 Button3에 들어가는 값이 null 이면 Button3를 숨기게 하고, null이 아니라면 보이게 하고싶습니다.

여러 코드를 찾아보았지만 잘 해결되지 않고 있습니다. 

이런식으로 코드를 찾아보았는데도 제대로 실행이 되지 않습니다.

   if (contacts_number3.getContext().equals("")) {
                contacts_number3.setVisibility(View.INVISIBLE);
            }

아래는 전체 코드입니다.

 

public class User_contacts extends AppCompatActivity {

    private ProgressDialog pDialog;
    private ListView contacts_listview;
    private Button contacts_number1;

    private static String url = "http://ㅇㅇㅇㅇㅇ.php";

    ArrayList<HashMap<String, String>> contactList;

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

        contactList = new ArrayList<>();
        contacts_listview = (ListView) findViewById(R.id.contacts_listview);
        new GetContacts().execute();

}

    private class GetContacts extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            // Showing progress dialog
            pDialog = new ProgressDialog(User_contacts.this);
            pDialog.setMessage("잠시만 기다려주세요...");
            pDialog.setCancelable(false);
            pDialog.show();

        }

        @Override
        protected Void doInBackground(Void... arg0) {
            bt1_HttpHandler sh = new bt1_HttpHandler();

            // Making a request to url and getting response
            String jsonStr = sh.makeServiceCall(url);

            Log.e(TAG, "Response from url: " + jsonStr);

            if (jsonStr != null) {
                try {
                    JSONObject jsonObj = new JSONObject(jsonStr);

                    // Getting JSON Array node
                    JSONArray contacts = jsonObj.getJSONArray("result");

                    // looping through All Contacts
                    for (int i = 0; i < contacts.length(); i++) {
                        JSONObject c = contacts.getJSONObject(i);

                        //String Business = c.getString("Business");
                  //      String Team = c.getString("Team");
                    //    String Class = c.getString("Class");
                        String Name = c.getString("Name");
                        String Title = c.getString("Title");
                        String Position = c.getString("Position");
                        String Number1 = c.getString("Number1");
                        String Number2 = c.getString("Number2");
                        String Number3 = c.getString("Number3");

                        // tmp hash map for single contact
                        HashMap<String, String> contact = new HashMap<>();

                        // adding each child node to HashMap key => value

                        contact.put("Name", Name );
                        contact.put("Title", Title);
                        contact.put("Position", Position);
                        contact.put("Number1", Number1);
                        contact.put("Number2", Number2);
                        contact.put("Number3", Number3);


                        contactList.add(contact);
                        }

                } catch (final JSONException e) {
                    Log.e(TAG, "Json parsing error: " + e.getMessage());
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(getApplicationContext(),
                                    "Json parsing error: " + e.getMessage(),
                                    Toast.LENGTH_LONG)
                                    .show();
                        }
                    });
                }
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            // Dismiss the progress dialog
            if (pDialog.isShowing())
                pDialog.dismiss();
            /**
             * Updating parsed JSON data into ListView
             * */
            ListAdapter adapter = new SimpleAdapter(
                    User_contacts.this, contactList,
                    R.layout.user_contacts_list_item, new String[]{"Name", "Title", "Position", "Number1", "Number2", "Number3"
            }, new int[]{R.id.contacts_name, R.id.contacts_title, R.id.contacts_position, R.id.contacts_number1, R.id.contacts_number2, contacts_number3
            });

            Button contacts_number3 = (Button) findViewById(R.id.contacts_number3);
         
            contacts_listview.setAdapter(adapter);
        }
    }

}
익명사용자 님이 2017년 5월 25일 질문

2개의 답변

0 추천
코드 전체는 안봤지만

버튼에 글자가 없으면 숨긴다는것 같으니..

 

contacts_number3.getContext().equals("")

-> contacts_number3.getText().toString().equals("")
익명사용자 님이 2017년 5월 25일 답변
제일 하단부분에 이런식으로 코드를 작성해 보았는데
실행과 동시에 오류가 발생해버립니다 ㅠㅠ      
 protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            // Dismiss the progress dialog
            if (pDialog.isShowing())
                pDialog.dismiss();
            /**
             * Updating parsed JSON data into ListView
             * */
            ListAdapter adapter = new SimpleAdapter(
                    User_contacts.this, contactList,
                    R.layout.user_contacts_list_item, new String[]{"Name", "Title", "Position", "Number1", "Number2", "Number3"
            }, new int[]{R.id.contacts_name, R.id.contacts_title, R.id.contacts_position, R.id.contacts_number1, R.id.contacts_number2, contacts_number3
            });
            Button contacts_number3 = (Button) findViewById(R.id.contacts_number3);
            if (contacts_number3.getText().toString().equals("")) {
                contacts_number3.setVisibility(View.GONE);
                contacts_listview.setAdapter(adapter);
            }else {
                contacts_listview.setAdapter(adapter);
            }

        }
        }
    }
0 추천

contacts_number3 이 버튼이 리스트 뷰 안에 있는 버튼인가요?

각 줄마다 있는?

그렇다면 setadapter하기 전에 해당 객체 값을 가져오는거 자체가 문제 인거 같구요

 

adapter를 상속하는 클래스를 만들어서 getview안에서 

button3에 들어가는 값 자체 유무에 따라 visible gone하는 방식으로 처리 해야 할거 같습니다. 

뱀휅휅 (1,170 포인트) 님이 2017년 5월 26일 답변
...