【问题标题】:Android: pass TextView data from ListView to TextView in another activityAndroid:将 TextView 数据从 ListView 传递到另一个活动中的 TextView
【发布时间】:2017-12-18 23:51:05
【问题描述】:

我是 Android 新手,如何从主要活动的 ListView 传递 TextView 数据和图像,以便在另一个活动中设置 TextView 中的数据以查看它。 ListView 监听器上的这段代码。

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            Intent intent = new Intent(getApplicationContext(),SecondActivity.class);
            intent.putExtra("MobileName",adapter.getItem(position).toString());
            startActivity(intent);
        }
    });

这是我的适配器方法,

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

这是我要在其中显示数据的活动,

id = findViewById(R.id.textOne1);
name = findViewById(R.id.textTwo2);
id.setText(getIntent());
name.setText();

nameid 是另一个布局中的 TextView,我想从 main activity 中的数据中填充它, 如何从主要活动中获取每个 TextView 的数据以设置 idname

这是我的适配器

public MyAdapter(List<Employee> emps,Context context){

    this.emps=emps;
    this.context=context;
    this.empFilters=emps;
}

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

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

@Override
public long getItemId(int position) {
    return position;
}

@ Override
public View getView(int position, View convertView, ViewGroup parent) {
  View myView=null;
    if (convertView==null) {
        LayoutInflater inflater = LayoutInflater.from(context);
         myView = inflater.inflate(R.layout.for_list_view, parent, false);
        ViewHolder vh=new ViewHolder();

        vh.idText=myView.findViewById(R.id.id);
        vh.nameText=myView.findViewById(R.id.name);
        vh.imageView=myView.findViewById(R.id.image);
        myView.setTag(vh);
    } else
       myView=convertView;


    Employee e=emps.get(position);
         ViewHolder vh = (ViewHolder)myView.getTag();

    vh.idText.setText(e.getId()+"");
    vh.nameText.setText(e.getName());
    vh.imageView.setImageResource(e.getImg());

    return myView;
}

【问题讨论】:

  • 你能在你获取数据的地方显示你的适配器代码吗?

标签: android listview


【解决方案1】:

您需要使用适当的方法和放置 Extra 时使用的密钥从 Intent 中获取 extra(s)。

例如name.setText(getIntent().getStringExtra("MobileName")); (而不是name.setText();

关于获取 id 的信息不足,所以id.setText(getIntent()); 将无济于事:-

【讨论】:

    【解决方案2】:

    有多种方法可以做到这一点,具体取决于您声明数据对象的位置。 假设您有一个在 ListView 中显示的数据对象列表。所以你的 Activity 类有:-

    List<ListItemHolder> data = new ArrayList<>();
    ListView lv;
    
    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    
                Intent intent = new Intent(getApplicationContext(),SecondActivity.class);
                intent.putExtra("MobileId", data.get(position).getId());
                intent.putExtra("MobileName", data.get(position).getName());
    
                startActivity(intent);
            }
        });
    

    这是你的数据pojo:-

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

    现在在第二个活动中,将代码更改为:-

    id = findViewById(R.id.textOne1);
    name = findViewById(R.id.textTwo2);
    id.setText(getIntent().getIntExtra("MobileId"));
    name.setText(getIntent().getStringExtra("MobileName"));
    

    我目前无法访问 Android Studio,因此您可能需要进行一些修改才能使其正常工作。

    【讨论】:

    • 谢谢,当我写这篇文章时,我要求我在这个 id.setText(getIntent().getIntExtra("MobileId"));当我像这样输入 0 时 id.setText(getIntent().getIntExtra("MobileId",0));应用停止了问题在哪里?
    • “应用停止”没有任何意义。检查日志,错误是什么?
    猜你喜欢
    • 2014-05-01
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    相关资源
    最近更新 更多