0

リストビュー項目をクリック可能にしようとしています。しかし、それを正しく機能させることはできません。アイテムをクリックすると、画面は移動しますが、目的の画面には移動しません。ここにコードがあります

private ListView lv;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_signup);
    lv = (ListView) findViewById(R.id.listView1);
    // Instanciating an array list (you don't need to do this, you already have yours)
    ArrayList<String> menu_Items = new ArrayList<String>();
    menu_Items.add("Fill Treatment Form");
    menu_Items.add("View Medical History");
    menu_Items.add("View Medication");
    menu_Items.add("View Diet");
    menu_Items.add("View First Aid");
    menu_Items.add("Look Up Map");
    menu_Items.add("Account Settings");
    // This is the array adapter, it takes the context of the activity as a first // parameter, the type of list view as a second parameter and your array as a third parameter
    ArrayAdapter<String> arrayAdapter =      
    new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, menu_Items);
    lv.setAdapter(arrayAdapter);


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

            Intent i = new Intent(getApplicationContext(), FillTreatmentActivity.class);
            startActivity(i);

        }

    });

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

            Intent i = new Intent(getApplicationContext(), MedicalHistoryActivity.class);
            startActivity(i);
        }
    });

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

            Intent i = new Intent(getApplicationContext(), MedicationActivity.class);
            startActivity(i);
        }
    });

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

            Intent i = new Intent(getApplicationContext(),DietActivity.class);
            startActivity(i);
        }
    });

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

            Intent i = new Intent(getApplicationContext(),FirstAidActivity.class);
            startActivity(i);
        }
    });

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

            Intent i = new Intent(getApplicationContext(),MapActivity.class);
            startActivity(i);
        }
    });

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

            Intent i = new Intent(getApplicationContext(),SettingsActivity.class);
            startActivity(i);
        }
    }); 
}

リストビュー項目のいずれかをクリックすると、Accounte Settings Activity が開きます。私は初心者なので、私のコーディングを判断しないでください:)

4

5 に答える 5

2

リストビューには が 1 つしかないOnItemClickListenerため、最後のものを除いてすべて破棄されます。SettingsActivityそれが、どのアイテムをタップしてもオープンエンドである理由です。

これを解決するには、1 つのリスナーを使用して、このリスナーにさまざまなオプションを処理させます。

lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> arg1, View view, int position, long id) {
        switch(position) {
           case 0:
               // start activity 1
               break;
           case 1:
               // start activity 2
               break;
           case 2:
               // start activity 3
               break;
           // more case statements

    }
});
于 2013-03-04T15:32:52.357 に答える
1

android:onClick="myClickMethod"のレイアウトに追加してlistviewから、同じ名前のメソッドを作成してみませんか? そこでは、どのビューが正確に押されたかを見ることができます。また、listViewには1つしかありませんonClickListener;-)

乾杯

于 2013-03-04T15:34:32.450 に答える
1

クリック リスナーに switch ステートメントを追加してみてください

private ListView lv;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_signup);
    lv = (ListView) findViewById(R.id.listView1);
    // Instanciating an array list (you don't need to do this, you already have yours)
    ArrayList<String> menu_Items = new ArrayList<String>();
    menu_Items.add("Fill Treatment Form");
    menu_Items.add("View Medical History");
    menu_Items.add("View Medication");
    menu_Items.add("View Diet");
    menu_Items.add("View First Aid");
    menu_Items.add("Look Up Map");
    menu_Items.add("Account Settings");
    // This is the array adapter, it takes the context of the activity as a first // parameter, the type of list view as a second parameter and your array as a third parameter
    ArrayAdapter<String> arrayAdapter =      
    new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, menu_Items);
    lv.setAdapter(arrayAdapter);


    lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> arg0, View view, int position, long id) {
        switch(position){
          case 0:
        Intent i = new Intent(getApplicationContext(), FillTreatmentActivity.class);
                startActivity(i);
        break;
          case 1:
        Intent i = new Intent(getApplicationContext(), MedicalHistoryActivity.class);
            startActivity(i);
        break;
          case 2:
        Intent i = new Intent(getApplicationContext(), MedicationActivity.class);
            startActivity(i);
        break;
          case 3:
        Intent i = new Intent(getApplicationContext(),DietActivity.class);
                startActivity(i);
        break;
          case 4:
        Intent i = new Intent(getApplicationContext(),FirstAidActivity.class);
                startActivity(i);
        break;
          case 5:
        Intent i = new Intent(getApplicationContext(),MapActivity.class);
                startActivity(i);
        break;
          case 6:
        Intent i = new Intent(getApplicationContext(),SettingsActivity.class);
                startActivity(i);
        break;

        }


        }

    });
}
于 2013-03-04T15:37:48.450 に答える
0

これがその方法です。私はそれを間違っていました。助けてくれてありがとう。平和 /

private ListView lv;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_signup);
    lv = (ListView) findViewById(R.id.listView1);
    // Instanciating an array list (you don't need to do this, you already have yours)
    ArrayList<String> menu_Items = new ArrayList<String>();
    menu_Items.add("Fill Treatment Form");
    menu_Items.add("View Medical History");
    menu_Items.add("View Medication");
    menu_Items.add("View Diet");
    menu_Items.add("View First Aid");
    menu_Items.add("Look Up Map");
    menu_Items.add("Account Settings");
    // This is the array adapter, it takes the context of the activity as a first // parameter, the type of list view as a second parameter and your array as a third parameter
    ArrayAdapter<String> arrayAdapter =      
    new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, menu_Items);
    lv.setAdapter(arrayAdapter);


    lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> arg0, View view, int position, long id) {
        switch(position){
          case 0:
        Intent i = new Intent(getApplicationContext(), FillTreatmentActivity.class);
                startActivity(i);
        break;
          case 1:
        Intent j = new Intent(getApplicationContext(), MedicalHistoryActivity.class);
            startActivity(j);
        break;
          case 2:
        Intent k = new Intent(getApplicationContext(), MedicationActivity.class);
            startActivity(k);
        break;
          case 3:
        Intent l = new Intent(getApplicationContext(),DietActivity.class);
                startActivity(l);
        break;
          case 4:
        Intent m = new Intent(getApplicationContext(),FirstAidActivity.class);
                startActivity(m);
        break;
          case 5:
        Intent n = new Intent(getApplicationContext(),MapActivity.class);
                startActivity(n);
        break;
          case 6:
        Intent o = new Intent(getApplicationContext(),SettingsActivity.class);
                startActivity(o);
        break;

        }


        }

    });
于 2013-03-04T15:53:28.613 に答える
0

すべてのリストを処理するリスナーを作成する必要がありました。このようなもの:

lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView arg6, View view, int position, long id) {
swith(position){
        case 1:
        Intent i = new Intent(getApplicationContext(), FillTreatmentActivity.class);
            startActivity(i);
            break;
        case 2:
        ...
        }
        }
    });

または、クラス ArrayAdaptyer を拡張して、要素ごとに単一のリスナーを実現できます

于 2013-03-05T07:52:12.447 に答える