【问题标题】:Set layout with listview selected item - Android使用列表视图选定项目设置布局 - Android
【发布时间】:2020-04-14 00:17:02
【问题描述】:

我有问题。

  • 我想用列表视图上的选定项目重定向布局。
  • 我想要重定向的布局有空视图对象,我想要 用所选列表视图对象中的数据填充它们
  • 但我不能,我进行了调试,但在第 67 行出现错误 单击列表视图对象。我该怎么办?

请帮我做作业

onCreate 方法中的这段代码 代码:

    final ListView listView = (ListView) findViewById(R.id.lw_yemekTarifleri);
    customAdapter adapter = new customAdapter(this, yemekTarifleriList);
    listView.setAdapter(adapter);


    listView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            //Log.i("OnClick", "position = " + position);


            ImageView yemekResim = (ImageView) findViewById(R.id.iw_yemekResim);
            TextView yemekIsim = (TextView) findViewById(R.id.tw_yemekIsim);
            TextView yemekSure = (TextView) findViewById(R.id.tw_yemekSure);
            TextView yemekMalzemeler = (TextView) findViewById(R.id.tw_malzemeler);
            TextView yemekTarif = (TextView) findViewById(R.id.tw_tarif);

            yemekTarifi secilenYemek = yemekTarifleriList.get(position);

            yemekResim.setImageResource(secilenYemek.getResim());        //(line 67)!!!!!!!!!!!!
            yemekIsim.setText(secilenYemek.getIsim());
            yemekSure.setText(secilenYemek.getHazirlanisSuresi());
            yemekMalzemeler.setText(secilenYemek.getMalzemeler());
            yemekTarif.setText(secilenYemek.getTarif());

            setContentView(R.layout.yemek_tarifi);



        }
    });

错误:

E/AndroidRuntime: 致命异常: main 进程:com.example.erensayar_yemektarifi,PID:13293 java.lang.NullPointerException:尝试在空对象上调用虚拟方法“void android.widget.ImageView.setImageResource(int)” 参考 在 com.example.erensayar_yemektarifi.anaSayfa_yemekTarifleri$1.onItemClick(anaSayfa_yemekTarifleri.java:67) 在 android.widget.AdapterView.performItemClick(AdapterView.java:318) 在 android.widget.AbsListView.performItemClick(AbsListView.java:1159) 在 android.widget.AbsListView$PerformClick.run(AbsListView.java:3136) 在 android.widget.AbsListView$3.run(AbsListView.java:4052) 在 android.os.Handler.handleCallback(Handler.java:873) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:193) 在 android.app.ActivityThread.main(ActivityThread.java:6669) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

代码上传到github:github.com/erensayar/android

【问题讨论】:

  • 请发布您的项目布局 xml 文件。
  • 我上传到github:github.com/erensayar/android

标签: android listview layout adapter


【解决方案1】:

检查 secilenYemek 对象的值是否真的用值初始化。 我的建议是在第 67 行(即第 66 行)之前设置一个调试点,并正确检查 secilenYemek 对象的值。因为它正在抛出空指针异常。

【讨论】:

  • 你是对的。我照你说的做了。变量为空。我有一个想法,我会尝试回来,谢谢 Arsalan。
  • 我的想法没有奏效:) 我该怎么办?如何获取变量并编写布局?
【解决方案2】:

试试这个

  ImageView yemekResim = (ImageView) findViewById(R.id.iw_yemekResim);
  TextView yemekIsim = (TextView) findViewById(R.id.tw_yemekIsim);
  TextView yemekSure = (TextView) findViewById(R.id.tw_yemekSure);
  TextView yemekMalzemeler = (TextView) findViewById(R.id.tw_malzemeler);
  TextView yemekTarif = (TextView) findViewById(R.id.tw_tarif);

final ListView listView = (ListView) findViewById(R.id.lw_yemekTarifleri);
customAdapter adapter = new customAdapter(this, yemekTarifleriList);
listView.setAdapter(adapter);


listView.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        //Log.i("OnClick", "position = " + position);



        yemekTarifi secilenYemek = yemekTarifleriList.get(position);

        yemekResim.setImageResource(secilenYemek.getResim());        
        yemekIsim.setText(secilenYemek.getIsim());
        yemekSure.setText(secilenYemek.getHazirlanisSuresi());
        yemekMalzemeler.setText(secilenYemek.getMalzemeler());
        yemekTarif.setText(secilenYemek.getTarif());

        setContentView(R.layout.yemek_tarifi);



    }
});

【讨论】:

  • 我试过了,但没用,这段代码更合理,谢谢。
【解决方案3】:

我发现了我的问题。 我忘记为我的目标布局打开一个活动类。我创建了布局,但我没有创建活动。 然后,我应该我的数据我必须从 listview onclick 活动发送其他活动(我的布局适配器)。

我们应该使用意图 像这样:

//这个块已经有了

    final ListView listView = (ListView) findViewById(R.id.lw_yemekTarifleri);
    customAdapter adapter = new customAdapter(this, yemekTarifleriList);
    listView.setAdapter(adapter);

//当我们点击listview中的元素时(Sender)

    listView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            setContentView(R.layout.yemek_tarifi_yemek_tarifleri);
            yemekTarifi secilenYemek = yemekTarifleriList.get(position);

            //Log.d("OnClick", "position = " + yemekTarifleriList.get(position));


            //Elemanları layouta bastırmak için bu verileri öbür activity'e yani istediğimiz layouta göndermeliyiz. O da intent.putextra ile oluyor.
            Intent intent = new Intent(getApplicationContext(), yemekTarifiAdapter.class);


            intent.putExtra("isim", secilenYemek.getIsim());
            intent.putExtra("malzemeler", secilenYemek.getMalzemeler());
            intent.putExtra("tarif", secilenYemek.getTarif());
            intent.putExtra("sure", secilenYemek.getHazirlanisSuresi());

            startActivity(intent);

        }
    });

//此块目标布局的类。(适配器)

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

    ImageView yemekResim = (ImageView) findViewById(R.id.iw_yemekResim);
    TextView yemekIsim = (TextView) findViewById(R.id.tw_yemekIsim);
    TextView yemekSure = (TextView) findViewById(R.id.tw_yemekSure);
    TextView yemekMalzemeler = (TextView) findViewById(R.id.tw_malzemeler);
    TextView yemekTarif = (TextView) findViewById(R.id.tw_tarif);


    //Receiver 
    String isim = getIntent().getExtras().getString("isim");
    String malzemeler = getIntent().getExtras().getString("malzemeler");
    String tarif = getIntent().getExtras().getString("tarif");
    int sure = getIntent().getExtras().getInt("sure");



    yemekIsim.setText(isim);
    yemekSure.setText(String.valueOf(sure));
    yemekMalzemeler.setText(malzemeler);
    yemekTarif.setText(tarif);



}//OnCreate Sonu

感谢所有帮助过的人。

如果想查看所有新代码:github/erensayar/android

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多