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

리스트뷰 액티비티 전환 질문이요~

0 추천
제가 리스트뷰를 만들고 있는데요

메인에서 추가버튼을 누르면 플러스액티비티에서 아이디와 비밀번호를 입력받아

메인으로 돌아와서 리스트를 추가하는데 까지는 성공했습니다.

그런데 추가된 리스트를 클릭하면 비밀번호가 있는 화면으로 전환해주고 싶은데 잘 않되네요

고수님들 도와주세요 ㅜㅜ

 

package com.example.a.wiho;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;

import java.util.ArrayList;

public class MainActivity extends Activity {

    private ArrayList<String> items;
    private ArrayAdapter<String> adapter;

    Intent intent;

    EditText edit;

    @Override

    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        edit = (EditText)findViewById(R.id.editTextselect);

        edit = (EditText) findViewById(R.id.editTextselect);
        edit.setInputType(0);
        edit.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                edit.setInputType(1);
                InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                mgr.showSoftInput(edit, InputMethodManager.SHOW_IMPLICIT);
            }
        });

        // 검색 이벤트
        edit.addTextChangedListener(new TextWatcher() {
            public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
            }

            public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
            }

            public void afterTextChanged(Editable arg0) {
                MainActivity.this.adapter.getFilter().filter(arg0);
            }
        });

        // ListView의 데이터를 저장할 Adapter 생성
        items = new ArrayList<String>();

        items.add("admin");
        items.add("Anygate");

        adapter = new ArrayAdapter<String>(this, R.layout.activity_list, items);
        ListView lv = (ListView) findViewById(R.id.lv_data);
        lv.setAdapter(adapter);

        // ListView의 이벤트 설정
        lv.setOnItemClickListener(new ListViewItemClickListener());
        lv.setOnItemLongClickListener(new ListViewItemLongClickListener());

    }

    // 추가 버튼 클릭
    public void onBtnAddClick( View v )
    {
        intent = new Intent(MainActivity.this, PlusActivity.class);
        startActivityForResult(intent, 0);
    }

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        items.add(data.getStringExtra("Wifiname").toString());
        data.getStringExtra("Password").toString();
        adapter.notifyDataSetChanged();
        super.onActivityResult(requestCode, resultCode, data);
    }

    // ListView의 item을 클릭
    private class ListViewItemClickListener implements AdapterView.OnItemClickListener
    {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            String value = parent.getItemAtPosition(position).toString();
            Log.d("밸류값확인", value);
            if(value.equals("admin")) {
                Intent item = new Intent(MainActivity.this, adminActivity.class);
                startActivity(item);
            }
            else if(value.equals("Anygate")) {
                Intent item1 = new Intent(MainActivity.this, AnygateActivity.class);
                startActivity(item1);
            }
        }
    }

    // Long click된 item의 index를 기록
    int selectedPos = -1;

    // ListView의 item을 길게 클릭
    private class ListViewItemLongClickListener implements AdapterView.OnItemLongClickListener
    {

        @Override

        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id)
        {
            selectedPos = position;
            AlertDialog.Builder alertDlg = new AlertDialog.Builder(view.getContext());
            alertDlg.setTitle(R.string.alert_title_question);

            // '예' 버튼 클릭
            alertDlg.setNegativeButton( R.string.button_yes, new DialogInterface.OnClickListener()
            {

                @Override

                public void onClick( DialogInterface dialog, int which )
                {
                    items.remove(selectedPos);

                    // method를 호출하지 않을 경우
                    adapter.notifyDataSetChanged();

                    // AlertDialog를 종료
                    dialog.dismiss();
                }
            });

            // '아니오' 버튼 클릭
            alertDlg.setPositiveButton( R.string.button_no, new DialogInterface.OnClickListener()
            {

                @Override

                public void onClick( DialogInterface dialog, int which ) {

                    // AlertDialog를 닫는다.
                    dialog.dismiss();
                }
            });

            alertDlg.setMessage( String.format( getString(R.string.alert_msg_delete), items.get(position)) );
            alertDlg.show();
            return false;
        }

    }

}

package com.example.a.wiho;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class PlusActivity extends Activity {
    Intent intent;
    Button backButton;
    Button addButton;
    EditText editText;
    EditText editText2;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_plus);

        intent = getIntent();
        backButton = (Button) findViewById(R.id.backButton);
        addButton = (Button) findViewById(R.id.addbutton);

        editText = (EditText) findViewById(R.id.editText);
        editText2 = (EditText) findViewById(R.id.editText2);

        backButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                finish();
            }
        });

        addButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                if(editText.getText().toString().equals("")){
                    Toast.makeText(PlusActivity.this, "Wifi 이름을 입력하세요.", Toast.LENGTH_SHORT).show();
                }else{
                    intent.putExtra("Wifiname", editText.getText().toString());
                    intent.putExtra("Password", editText2.getText().toString());
                    setResult(RESULT_OK, intent);
                    finish();
                }
            }
        });

    }

}
iks1681 (280 포인트) 님이 2016년 10월 9일 질문
if(value.equals("admin")) {
                Intent item = new Intent(MainActivity.this, adminActivity.class);
                startActivity(item);
            }
            else if(value.equals("Anygate")) {
                Intent item1 = new Intent(MainActivity.this, AnygateActivity.class);
                startActivity(item1);
            }



이중에 어떤 화면을 가려고 하는것이죠?

그리고 안된다는건 에러가 뜬다는건가요? 아니면 동작을 안한다는건가요?

2개의 답변

0 추천
아뇨 그 두개는 이미 따로 만들었습니다.

제가 궁금한것은 추가된 리스트로 들어가는 겁니다
익명사용자 님이 2016년 10월 9일 답변
0 추천

방금 추가한 아이템이 어떤 건지 몰라서 그러시는 건가요? onActivityResult 이벤트에서 어떤 걸 추가했는지 저장하시면 될 것 같은데요.

private String lastAddName;

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        lastAddName = data.getStringExtra("Wifiname").toString();
        items.add(lastAddName);
        data.getStringExtra("Password").toString();
        adapter.notifyDataSetChanged();
}

  // ListView의 item을 클릭
    private class ListViewItemClickListener implements AdapterView.OnItemClickListener
    {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            String value = parent.getItemAtPosition(position).toString();
            Log.d("밸류값확인", value);
            if(value.equals("admin")) {
                //
            }
            else if(value.equals("Anygate")) {
              //
            }
           else if (values.equals(lastAddName) {
                Intent intent = new Intent(MainActivity.this, YourActivity.class);
                intent.putExtra("YOUR_KEY", lastAddName);
                startActivity(intent); 
           }
        }
    }

도움이 되시길.

spark (227,930 포인트) 님이 2016년 10월 9일 답변
제가 하고 싶은것은 리스트가 새롭게 추가되면
그 추가된 리스트를 클릭함으로서 새로운 액티비티가 나왔으면 합니다.
그런데, 새롭게 만들 때마다 일일이 레이아웃이나 자바를 늘려줘야 해서요 ㅠㅠ
그리고 새롭게 만들어진 액티비티에 plus액티비티에서 입력받은 비밀번호를 출력하고 싶은데 그게 잘 않됩니다.
어떻게 방법이 없을까요?
딱 변경된 만큼만 리스트를 갱신하는 건 리스트뷰에서는 안되고adapter.notifyDataSetChanged()를 호출하여 데이터셑을 다시 갱신해주어 하고, recylerview에서는 새로운 메소드가 추가되어 지원되는 걸로 알고 있습니다.
그럼 adapter.notifyDataSetChanged()를 호출하면 가능한건가요?
제가 안드로이드를 독학으로만 배우다 보니 잘 모르겠는데, 혹시
예제 같은 것을 볼 수 있는 방법은 없나요?
그리고 플러스액티비티에서 그냥 바로 취소하면 멋대로 멈춰버리는데
이건 어떻게 해야 할까요?
댓글로 새로운 질의응답을 계속하는 것보다는 그것과 관련해서 새로운 질문을 올리시는게 다른 사람들이 관련된 내용을 찾기에 더 도움이 될 것 같습니다. 질문을 정리해서 다시 올려보시겠어요?
...