【问题标题】:onListItemClick doesn't respond on clickonListItemClick 在点击时没有响应
【发布时间】:2013-12-08 15:25:40
【问题描述】:

我的 onListItemClick 有问题。

这是我的 Menu.java 类

public class Menu extends ListActivity{

String classes[] = { "MainActivity", "etcetera1", "etcetera2", "etcetera3", "etcetera4", "etcetera5"};

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setListAdapter(new ArrayAdapter<String>(Menu.this, android.R.layout.simple_list_item_1, classes));
}

@SuppressWarnings("rawtypes")
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {

    // TODO Auto-generated method stub
    super.onListItemClick(l, v, position, id);
    String positie = classes[position];
    try{
    Class ourClass = Class.forName("com.jacob.eindproject.MAIN" + positie);
    Intent ourIntent = new Intent(Menu.this, ourClass);
    startActivity(ourIntent);
    }catch (ClassNotFoundException e){
        e.printStackTrace();
    }
}

这是我的 MainActivity 类(它是一个 BMI 计算器。):

public class MainActivity extends Activity {

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

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate het menu
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }


     public void calculateClickHandler(View view) {
         // handeld het klikken op de button

         if (view.getId() == R.id.berekenButton) {

          // referenties
          EditText gewichtText = (EditText)findViewById(R.id.gewichtText);
          EditText lengteText = (EditText)findViewById(R.id.lengteText);
          TextView resultaat = (TextView)findViewById(R.id.resultaat);

          // waarden

          float gewicht = Float.parseFloat(gewichtText.getText().toString());
          float lengte = Float.parseFloat(lengteText.getText().toString());

          // berekend de BMI

          float bmiWaarde = berekenBMI(gewicht, lengte);

          // zoekt de bijbehorende label (overgewicht etc.)
          String bmiInterpretation = interpretBMI(bmiWaarde);

          // weergeeft het resultaat

          resultaat.setText(bmiWaarde + "-" + bmiInterpretation);
         }
        }

        // de formule

        private float berekenBMI (float gewicht, float lengte) {

         return (float) (gewicht / (lengte * lengte));
        }


        // bijbehorende labels:
        private String interpretBMI(float bmiWaarde) {

         if (bmiWaarde < 16) {
          return "Ernstig Ondergewicht";
         } 

         else if (bmiWaarde < 18.5) {

          return "Ondergewicht";
         }

         else if (bmiWaarde < 25) {

          return "Normaal";
         }

         else if (bmiWaarde < 30) {

          return "Overgewicht";
         }

         else {
          return "Obees";
         }

        }
    }

如果我启动我的模拟器,它在单击列表项时没有响应。有人出主意吗?是的,我已经检查了这个网站上的所有相关问题。

编辑:(main.xml)

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

<item
    android:id="@+id/aboutUs"
    android:title="@+id/About"/>

    <item
    android:id="@+id/instellingen"
    android:title="@+id/Instellingen"/>


【问题讨论】:

  • 我认为您必须将 android:focusable="false" 设置为 ListView 。请检查这个问题stackoverflow.com/a/9841730/2438460
  • 您从 Menu 类中的哪里获取布局? Menu 类中没有 setContentView()。如果有一个XML布局文件,你是用@android:id/list作为id吗?
  • 嗨@RubenWeerts。感谢你的回复。我将通过添加我的 main.xml 来编辑我的问题,这是我的 menu.xml 文件。我还在菜单类中添加了 setContentView()。它没有成功。再次感谢您的回复!雅各布

标签: java android menu onitemclicklistener


【解决方案1】:

public class Menu extends ListActivity { 更改为

public class Menu extends ListActivity implements OnItemClickListener {

试试listview.setOnItemClickListener(this);

更新

添加

    ListView list1 = (ListView) findViewById(R.id.list);
    list1.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, classes));         
 list1 = getListView();

致您的onCreate

然后

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

    // TODO Auto-generated method stub
    super.onListItemClick(l, v, position, id);
    String positie = classes[position];
    try{
    Class ourClass = Class.forName("com.jacob.eindproject.MAIN" + positie);
    Intent ourIntent = new Intent(Menu.this, ourClass);
    startActivity(ourIntent);
    }catch (ClassNotFoundException e){
        e.printStackTrace();
    }
}
                }
         );

【讨论】:

  • 我不认为我真的得到了你。你把:listview.setOnItemClickListener(this); ?感谢您的快速回复!
  • 它仍然无法正常工作。你有什么进一步的想法吗? :) 感谢您的宝贵时间!
  • 感谢您的帮助!我没有百分百使用你的方法,但它对我帮助很大!我会把我的作为这个问题的答案。再次感谢!雅各布。
  • 欢迎 =),如果对您有帮助,请给它评分(向上箭头),如果您将其视为答案,请接受它(打勾)
【解决方案2】:

您没有使用您的 LIstView Activity 注册您的事件点击。 Here How:在你的 Menu.java 中写下以下内容..

@Override
  protected void onListItemClick(ListView l, View v, int position, long id) {
    // this you want to do
    String item = (String) getListAdapter().getItem(position);
    Toast.makeText(this, item + " selected", Toast.LENGTH_LONG).show();
  }

【讨论】:

    【解决方案3】:

    这对我来说最终是有用的:

        @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
    //Posistion 0 is the first item (the BMI-Calculator in my project.)
    super.onListItemClick(l, v, position, id);
    
    switch(position)
    {
    case 0: 
    Intent openStartingPoint = new Intent(getApplicationContext(),MainActivity.class);
    startActivity(openStartingPoint);   
    break;
    }
    
    }
    

    感谢所有帮助我并回答我问题的人!

    【讨论】:

      猜你喜欢
      • 2012-06-12
      • 2014-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-18
      相关资源
      最近更新 更多