Передача данных из listView в другое Activity EditText - PullRequest
1 голос
/ 06 мая 2020

Я отображаю данные в listView и при длительном нажатии на listView я хочу обновить его данные и передать их данные в другое действие Update Edit text.

мой код для отображения:

public class Retreivedata extends AppCompatActivity {
ListView listView;
FirebaseDatabase database;
DatabaseReference ref;
ArrayList<String> list;
ArrayAdapter<String> adapter;
Member member;
 Button btnDlt;
 Boolean a=false;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_retreivedata);
    member = new Member();
   listView =(ListView)findViewById(R.id.listView);
    btnDlt = (Button) findViewById(R.id.btnDlt);
   database = FirebaseDatabase.getInstance();
   ref = database.getReference("Member");
   list = new ArrayList<>();
   adapter = new ArrayAdapter<String>(this,R.layout.list_white_text,R.id.userInfo, list);
   ref.addValueEventListener(new ValueEventListener() {
       @Override
       public void onDataChange(DataSnapshot dataSnapshot) {
                     for(DataSnapshot dts: dataSnapshot.getChildren())
                     {
                         member = dts.getValue(Member.class);
                         list.add("Name :"+member.getName().toString()+" Age 
            :"+member.getAge().toString()+" Phone :"+member.getPhone().toString()+"\n"+"------------- 
      -----------");
           }
           listView.setAdapter(adapter);
       }

       @Override
       public void onCancelled(DatabaseError databaseError) {

       }
   });

      btnDlt.setEnabled(false);
  listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
      @Override
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
          Boolean a=true;
          String item = adapter.getItem(position);
          Toast.makeText(Retreivedata.this,"Do u want to delete this 
        record!!",Toast.LENGTH_LONG).show();
          if (a==true)
          {
              btnDlt.setEnabled(true);

          }else{
              btnDlt.setEnabled(false);
          }
      }
          });

  listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
      @Override
      public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
          String item = adapter.getItem(position).toString();
          Intent intent = new Intent(Retreivedata.this, Update.class);
          intent.putExtra("tem",item);
          startActivity(intent);
          return false;
      }
  });

    btnDlt.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
                ref.child(member.getMemberId()).removeValue();
                Toast.makeText(Retreivedata.this, "Record deleted Successfully", Toast.LENGTH_LONG).show();
                adapter.remove(val);
                adapter.clear();
            }
    });

}
}

Я хочу получать данные об имени, возрасте, телефоне и росте в каждом EditText в другом действии.

Мой код для получения данных:

public class Update extends AppCompatActivity {

EditText EditTxtName,EditTxtAge,txtPhone,txtHeight;
Button btnUpdate;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_update);
    EditTxtName = (EditText)findViewById(R.id.EditTxtName);
    EditTxtAge = (EditText)findViewById(R.id.EditTxtAge);
    txtPhone = (EditText)findViewById(R.id.txtPhone);
    txtHeight = (EditText)findViewById(R.id.txtHeight);
    btnUpdate = (Button)findViewById(R.id.btnUpdate);

    String TempHolder = getIntent().getStringExtra("tem");

    EditTxtName.setText(TempHolder);
}
}

Я получаю все данные в EditTxtName, но я хотите установить эти данные в своих Edittexts.

Пожалуйста, посоветуйте мне, как это сделать .. Заранее спасибо.

1 Ответ

1 голос
/ 06 мая 2020

Вы должны использовать орудие Serializable или Parcelable ваш member class:

Первый способ Serializable вот так:

public class Member implements Serializable{
        private int id;
        private String name;

        public void setId(int id) {
           this.id = id;
        }
        public int getId() {
           return id;
        }
        public String getName() {
           return name;
        }

        public void setName(String name) {
           this.name = name;
        }
}

Затем вы можно передать этот объект следующим образом:

 Member member=adapter.getItem(position);
 Intent intent = new Intent(this, Update.class);
 intent.putExtra("tem", member);
 startActivity(intent);

И вы можете получить такие данные:

Member member= (Member) getIntent().getSerializableExtra("tem");

Тогда вы можете установить для данных в его EditText следующим образом:

EditTxtName.setName(member.name);

Второй способ Parcelable вот так:

public class ObjectA implements Parcelable
{
    private String name = null;
    private int id = 0;


    public ObjectA()
    {
    }

    @Override
    public int describeContents()
    {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags)
    {
        dest.writeString(this.name);
        dest.writeInt(this.id);
    }

    public void readFromParcel(Parcel in)
    {

        this.name = in.readString();
        this.id = in.readInt();
    }
}

Затем передайте свои данные следующим образом:

            Member member=adapter.getItem(position);
            Intent intent = new Intent(this,Update.class);
            intent.putExtra("tem", member);
            startActivity(i);

И получите это так:

Bundle bundle = getIntent().getExtras();
Member member = bundle.getParcelable("tem");

Затем установите для него editText следующим образом:

EditTxtName.setName(member.name);
...