gpt4 book ai didi

java - 如何使用 onItemClickListener() 将单击的项目的数据传递给另一个 Activity

转载 作者:行者123 更新时间:2023-12-02 03:16:49 26 4
gpt4 key购买 nike

我有电话簿应用程序,它将新联系人存储在 sqlite 表中。我有添加和(列出)查看联系人的 Activity ,它们工作得很好。
现在,我需要一个详细信息 Activity ,它将显示在 ListView 中单击的联系人的详细信息。我知道我应该使用 onItemClickListener(),但我尝试过的所有方法都不起作用。详细信息 Activity 包含三个 TextView(姓名、姓氏、电话)。
我所能得到的只是一个错误:

DataProvider cannot be cast to java.lang.String

如果有其他方法可以做到这一点,请告诉我具体方法。

这是 DisplayDataActivity.java :

public class DisplayDataActivity extends AppCompatActivity {


ListView listView;
SQLiteDatabase sqLiteDatabase;
UserDbHelper userDbHelper;
Cursor cursor;
ListDataAdapter listDataAdapter;


EditText Search_Last;
String search_Last;

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



Search_Last = (EditText) findViewById(R.id.searchName);

// This part of the code is from tutorial
listView = (ListView) findViewById(R.id.list_view_display);
listDataAdapter = new ListDataAdapter(getApplicationContext(), R.layout.row_layout);
listView.setAdapter(listDataAdapter);

userDbHelper = new UserDbHelper(getApplicationContext());
sqLiteDatabase = userDbHelper.getReadableDatabase();
cursor = userDbHelper.getInformations(sqLiteDatabase);
if (cursor.moveToFirst()) {
do {

String name, lastName, phone;
name = cursor.getString(0);
lastName = cursor.getString(1);
phone = cursor.getString(2);
DataProvider dataProvider = new DataProvider(name, lastName);
listDataAdapter.add(dataProvider);

} while (cursor.moveToNext());
}

// Opens detailed view when contact is clicked
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {



TextView entryName = (TextView) findViewById(R.id.entryNameDetail);
TextView entryLastName = (TextView) findViewById(R.id.entryLastDetail);
TextView entryPhone = (TextView) findViewById(R.id.entryPhoneDetail);

String data = (String) parent.getItemAtPosition(position);


String Name = entryName.getText().toString();
String Last = entryLastName.getText().toString();
String Phone = entryPhone.getText().toString();

Intent modify_intent = new Intent(getApplicationContext(), DetailView.class);
modify_intent.putExtra("Name", Name);
modify_intent.putExtra("last", Last);
modify_intent.putExtra("phone", Phone);

startActivity(modify_intent);


}
});



}

这是 DataProvider.java:

public class DataProvider {

private String name;
private String lastName;
private String phone;

public String getLastName() {
return lastName;
}

public void setLastName(String lastName) {
this.lastName = lastName;
}

public String getName() {
return name;
}

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

public DataProvider(String name, String lastName)
{
this.name = name;
this.lastName = lastName;


}}

DetailView.java:

public class DetailView extends AppCompatActivity {

TextView entryName, entryLastName, entryPhone;
ImageView entryPhoto;
Cursor cursor;

private DataProvider dataProvider;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail_view);




/* WHEN I RUN THIS PART OF THE CODE, THE NAME TEXTVIEW SHOWS EMPTY
Bundle data_from_list = getIntent().getExtras();
String value_in_name = data_from_list.getString("passed key data");
TextView entryName = (TextView)findViewById(R.id.entryNameDetail);
entryName.setText(value_in_name);
*/

/* Running this code throws me an error from above */
Intent modify_intent = getIntent();
String s1 = modify_intent.getStringExtra("Name");
String s2 = modify_intent.getStringExtra("Last");
String s3 = modify_intent.getStringExtra("Phone");

entryName = (TextView) findViewById(R.id.entryNameDetail);
entryLastName = (TextView) findViewById(R.id.entryLastDetail);
entryPhone = (TextView) findViewById(R.id.entryPhoneDetail);

entryName.setText(s1);
entryLastName.setText(s2);
entryPhone.setText(s3);


// Adding hardcoded data into TextView for testing purposes
// WORKING
//entryName.setText("Test ime");
//entryLastName.setText("Test PRezime");
//entryPhone.setText("test telefon");


}}

ListDataAdapter.class:

public class ListDataAdapter extends ArrayAdapter {
List list = new ArrayList();

public ListDataAdapter(Context context, int resource) {
super(context, resource);
}

static class LayoutHandler
{
TextView NAME, LASTNAME;

}

@Override
public void add(Object object) {
super.add(object);
list.add(object);
}

@Override
public int getCount() {
return list.size();
}

@Nullable
@Override
public Object getItem(int position) {
return list.get(position);
}

@NonNull
@Override
public View getView(int position, View convertView, ViewGroup parent) {

View row = convertView;
LayoutHandler layoutHandler;
if(row == null)
{
LayoutInflater layoutInflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = layoutInflater.inflate(R.layout.row_layout, parent, false);
layoutHandler = new LayoutHandler();
layoutHandler.NAME = (TextView) row.findViewById(R.id.text_user_name);
layoutHandler.LASTNAME = (TextView) row.findViewById(R.id.text_user_last);
row.setTag(layoutHandler);

}
else
{
layoutHandler = (LayoutHandler) row.getTag();


}
DataProvider dataProvider = (DataProvider) this.getItem(position);
layoutHandler.NAME.setText(dataProvider.getName());
layoutHandler.LASTNAME.setText(dataProvider.getLastName());

return row;


}}

最佳答案

listDataAdapter.add(dataProvider);

我认为您必须将 dataProvider (这是您要添加到列表中的数据)添加到 ArrayList 而不是您的自定义适配器。

相反,您将自定义适配器关联到 ArrayList 和 ListView 以实现可视化。

关于java - 如何使用 onItemClickListener() 将单击的项目的数据传递给另一个 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40179426/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com