android java search listview clickedItem

80 Views Asked by At

I'm fairly new

I have succeeded to display my search results in my listview using an EditText. Now when I click my result to bring up the "details" it gives me a wrong database record. The question is how to get the record of the clickedItem from my searchresults.

This is the List.java

public class List extends ActionBarActivity {

DatabaseManager db;
java.util.List<Passwords> passwordLijst = new ArrayList<Passwords>();
java.util.List<String> passwordsTitelLijst = new ArrayList<String>();
EditText inputSearch;
ListView listView;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_list);
    SwipeRefreshLayout mSwipe = (SwipeRefreshLayout) findViewById(R.id.activity_main_swipe_refresh_layout);



    ImageView imageView=new ImageView(this);
    imageView.setImageResource(R.drawable.ic_add_white_24dp);

    FloatingActionButton actionButton = new FloatingActionButton.Builder(this)
            .setContentView(imageView)
            .setBackgroundDrawable(R.drawable.selecter_button)
            .build();

    actionButton.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(getApplicationContext(), addPass.class);
                    startActivity(intent);
                }
            }
    );

    mSwipe.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            setRefreshListener();
        }
    });

   initDatabaseManager();


}





private void setRefreshListener() {
    construeerPasswordLijsten();
    constueerScherm();
    SwipeRefreshLayout mSwipe = (SwipeRefreshLayout) findViewById(R.id.activity_main_swipe_refresh_layout);
    mSwipe.setRefreshing(false);

}

@Override
protected void onResume(){
    super.onResume();
    construeerPasswordLijsten();
    constueerScherm();
}

private void construeerPasswordLijsten(){
    passwordLijst = db.getAllPassword();
    passwordsTitelLijst = Passwords.constructTitleList(passwordLijst);

}

private void constueerScherm(){
    final ListView myListView = (ListView) findViewById(R.id.mylist);
    ArrayAdapter adapter = new ArrayAdapter(getApplicationContext(),R.layout.rowlist, passwordsTitelLijst);
    myListView.setAdapter(adapter);
    myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, final View view, int position, long id) {
            int index = position;
            Passwords clickedItem = passwordLijst.get(index);
            Intent detailIntent = new Intent(getApplicationContext(), ListDetail.class);
            detailIntent.putExtra("clickedItem", clickedItem);
            startActivity(detailIntent);
        }
    });

    inputSearch = (EditText) findViewById(R.id.inputSearch);

    inputSearch.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {

        }

        @Override
        public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
            ArrayList<String> temp = new ArrayList<String>();
            int textlength = inputSearch.getText().length();
            temp.clear();
            for (int i = 0; i < passwordsTitelLijst.size(); i++) {
                if (textlength <= passwordsTitelLijst.get(i).length()) {
                    if (inputSearch.getText().toString().equalsIgnoreCase(
                            (String)
                                    passwordsTitelLijst.get(i).subSequence(0,
                                            textlength))) {
                        temp.add(passwordsTitelLijst.get(i));
                    }

                }
            }
            myListView.setAdapter(new ArrayAdapter<String>(List.this, R.layout.rowlist, temp));
            myListView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
                @Override
                public void onItemClick (AdapterView<?> parent, View view, int position, long id) {
                    int index = position;
                    Passwords clickedItem = passwordLijst.get(index);
                    Intent intent1 = new Intent(List.this, ListDetail.class);
                    intent1.putExtra("clickedItem", clickedItem);
                    startActivity(intent1);
                }
            });

        }

        @Override
        public void afterTextChanged(Editable arg0) {

        }
    });
}

Here is the ListDetail.java

public class ListDetail extends ActionBarActivity {

EditText showPW;
CheckBox mcbPW;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_list_detail);
    initialise();
    setEditButtonListener();
    setSaveButtonListener();
    setDeleteButtonListener();

    showPW = (EditText) findViewById(R.id.text_detail_pw);
    mcbPW = (CheckBox) findViewById(R.id.cbPW);
    mcbPW.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (!isChecked) {
                showPW.setTransformationMethod(PasswordTransformationMethod.getInstance());
            } else {
                showPW.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
            }
        }
    });
}


private void setDeleteButtonListener() {
    Button deleteBtn = (Button) findViewById(R.id.delete_detail_button);
    deleteBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = getIntent();
            Passwords clickedItem = (Passwords) i.getSerializableExtra("clickedItem");

            DatabaseManager db = DatabaseManager.getInstance();
            db.deletePasswords(clickedItem);

            Toast toast = Toast.makeText(getApplicationContext(), "Password Deleted!", Toast.LENGTH_SHORT);
            toast.show();

            Intent j = new Intent(getApplicationContext(),List.class);
            startActivity(j);
        }
    });
}

private  void setEditButtonListener() {
    Button editBtn = (Button) findViewById(R.id.update_detail_button);
    editBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            EditText txtView_title = (EditText) findViewById(R.id.text_detail_title);
            txtView_title.setEnabled(true);

            EditText txtView_user = (EditText) findViewById(R.id.text_detail_username);
            txtView_user.setEnabled(true);

            EditText txtView_pw = (EditText) findViewById(R.id.text_detail_pw);
            txtView_pw.setEnabled(true);

            EditText txtView_notes = (EditText) findViewById(R.id.text_detail_notes);
            txtView_notes.setEnabled(true);

            EditText txtView_url = (EditText) findViewById(R.id.text_detail_url);
            txtView_url.setEnabled(true);

            EditText txtView_expDate = (EditText) findViewById(R.id.text_detail_expDate);
            txtView_expDate.setEnabled(true);
        }
    });
}

private void setSaveButtonListener() {
    Button saveButton = (Button) findViewById(R.id.save_detail_button);
    saveButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            Intent intent = getIntent();

            Passwords clickedItem = (Passwords)intent.getSerializableExtra("clickedItem");

            EditText txtView_title = (EditText) findViewById(R.id.text_detail_title);
            String title = txtView_title.getText().toString();

            EditText txtView_user = (EditText) findViewById(R.id.text_detail_username);
            String user = txtView_user.getText().toString();

            EditText txtView_pw = (EditText) findViewById(R.id.text_detail_pw);
            String pw = txtView_pw.getText().toString();

            EditText txtView_notes = (EditText) findViewById(R.id.text_detail_notes);
            String notes = txtView_notes.getText().toString();

            EditText txtView_url = (EditText) findViewById(R.id.text_detail_url);
            String url = txtView_url.getText().toString();

            EditText txtView_expD = (EditText) findViewById(R.id.text_detail_expDate);
            String expD = txtView_expD.getText().toString();

            Passwords aangepastePW = new Passwords();
            aangepastePW.setId(clickedItem.getId());
            aangepastePW.setTitle(title);
            aangepastePW.setUsername(user);
            aangepastePW.setPassword(pw);
            aangepastePW.setNotities(notes);
            aangepastePW.setUrl(url);
            aangepastePW.setExpDate(expD);


            DatabaseManager db  = DatabaseManager.getInstance();

            db.updateStudent(aangepastePW);

            Toast.makeText(ListDetail.this, "Information Changed!", Toast.LENGTH_SHORT).show();

            Intent j = new Intent(getApplicationContext(),List.class);
            startActivity(j);
        }
    });
}

private void initialise() {

    Intent intent = this.getIntent();

    Passwords clickedItem = (Passwords)intent.getSerializableExtra("clickedItem");

    EditText txtView_title = (EditText) findViewById(R.id.text_detail_title);
    txtView_title.setText(clickedItem.getTitle());
    txtView_title.setEnabled(false);

    EditText txtView_username = (EditText) findViewById(R.id.text_detail_username);
    txtView_username.setText(clickedItem.getUsername());
    txtView_username.setEnabled(false);


    EditText txtView_pw = (EditText) findViewById(R.id.text_detail_pw);
    txtView_pw.setText(clickedItem.getPassword());
    txtView_pw.setEnabled(false);

    EditText txtView_notes = (EditText) findViewById(R.id.text_detail_notes);
    txtView_notes.setText(clickedItem.getNotities());
    txtView_notes.setEnabled(false);

    EditText txtView_url = (EditText) findViewById(R.id.text_detail_url);
    txtView_url.setText(clickedItem.getUrl());
    txtView_url.setEnabled(false);

    EditText txtView_expD = (EditText) findViewById(R.id.text_detail_expDate);
    txtView_expD.setText(clickedItem.getExpDate());
    txtView_expD.setEnabled(false);
}
1

There are 1 best solutions below

4
On

In the onItemClick of your listview replace the below line

Passwords clickedItem = passwordLijst.get(index);

with

Passwords clickedItem = adapter.getItem(index);

it retrieves the item at the given position in the adapter.