-1

そのため、スピナーに約 35 個の値が入力されています。たとえば、5 番目のアイテムを選択すると、それが選択されると、本来の動作を実行します (2 番目のスピナーを設定します)。私の問題は、その後すぐに (<1/2 秒)、2 番目のスピナーの値が、最初のスピナーのオプション 1 が選択された場合の値に戻ることです。最初のスピナーの 5 番目のアイテムはまだ選択されていますが、最初のアイテムが 1 秒に 2 回選択されているかのように動作します。

私はこれで見つけることができるすべてを試しました (ほとんど何も) が、これまでのところ何も機能していません。これは基本的に、アプリでさらに先に進むことに固執しています。

コード全体:

package com.nicotera.colton.londontransitguide;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.jsoup.*;
import org.jsoup.nodes.Attributes;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

public class RoutesActivity extends Activity implements OnItemSelectedListener {
    Spinner dirSpinner;
    Spinner routeSpinner;


static String [] namedDirections = new String [2];
private static final String TAG = "RoutesActivity";

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_routes);
    dirSpinner = (Spinner) findViewById(R.id.route_direction_spinner); // Create an ArrayAdapter using the string array and a default spinner layout
    routeSpinner = (Spinner) findViewById(R.id.route_name_spinner); // Create an ArrayAdapter using the string array and a default spinner layout
    routeSpinner.setOnItemSelectedListener(this);
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.routes_array, android.R.layout.simple_spinner_item);
    // Specify the layout to use when the list of choices appears
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // Apply the adapter to the spinner
    routeSpinner.setAdapter(adapter);
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, 
        int pos, long id) {
    Log.i(TAG, "Item selected");
    //DecimalFormat df = new DecimalFormat("00##");
    int tempPos = pos;
    Log.i(TAG, ("Position of selected item: " + tempPos));
    int routeSelected;
    if (tempPos < 17)
        routeSelected = (tempPos + 1);
    else if (tempPos >= 17 && tempPos < 29)
        routeSelected = (tempPos + 2);
    else
        routeSelected = (tempPos + 3);
    String temp;
    if (routeSelected < 10)
        temp = ("0") + routeSelected;
    else
        temp = ("") + routeSelected;
    String url = "http://www.ltconline.ca/WebWatch/MobileAda.aspx?r=" + temp;
    new MyInnerClass().execute(url);

}

public void directionSpinner (String directions []) {
    int temp;
    for (int i = 1; i <=2; i++)
    {
        temp = Integer.parseInt(directions[i]);
        if (temp == 1)
            namedDirections[(i-1)] = "Eastbound";
        else if (temp == 2)
            namedDirections[(i-1)] = "Northbound";
        else if (temp == 3)
            namedDirections[(i-1)] = "Southbound";
        else if (temp == 4)
            namedDirections[(i-1)] = "Westbound";               
    }
    //setContentView(R.layout.activity_routes);

    dirSpinner.setOnItemSelectedListener(this);
    ArrayAdapter<CharSequence> adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    adapter.add(namedDirections[0]);
    adapter.add(namedDirections[1]);
    dirSpinner.setAdapter(adapter);
    Log.i(TAG, "spinner populated");
}

public void onNothingSelected(AdapterView<?> parent) {
    // Another interface callback
}

class MyInnerClass extends AsyncTask<String, Void, String> {
    String [] directions = new String [3];
    String [] directionNames = new String [3];
    private static final String TAG = "RoutesActivity";
       @Override
       protected void onPreExecute() {
       super.onPreExecute();

       }

       @Override
       protected void onPostExecute(String result) {
       super.onPostExecute(result);
       RoutesActivity.this.directionSpinner(directions);
       }

    @Override
    protected String doInBackground(String... params) {
        try{
            Pattern routeDirPattern = Pattern.compile("\\&d=(\\d{1,2})");
            Connection conn = Jsoup.connect(params[0]);
            Document doc = conn.get();
            int i = 0;
            Elements routeLinks = doc.select("a[href]");
            for (Element routeLink : routeLinks) {
                i = (i + 1);
                String name = routeLink.text();
                Attributes attrs = routeLink.attributes();
                String href = attrs.get("href");
                Matcher m = routeDirPattern.matcher(href);
                if (m.find()) {
                        String number = m.group(1);
                        directions [i] = number;
                        directionNames [i] = name;
                        Log.i(TAG, directionNames [i]);
                }
            }
            }catch(Exception e){Log.d("doinbackground exception", e.toString());}

               return ("Done");
        }
    }
}
4

1 に答える 1

1

どちらがクリックされたかを確認する if ステートメントなしで、両方に同じ onselected リスナーを使用していたため、最初のリスナーがクリックされたと考えられました。

これは修正されたコードです:

@Override
public void onItemSelected(AdapterView<?> parent, View view, 
        int pos, long id) {
    Spinner spnr = (Spinner) parent;
    Log.i(TAG, "Item selected");
    switch(parent.getId()) {
    case R.id.route_name_spinner:
    //DecimalFormat df = new DecimalFormat("00##");
    int tempPos = pos;
    Log.i(TAG, ("Position of selected item: " + tempPos));
    int routeSelected;
    if (tempPos < 17)
        routeSelected = (tempPos + 1);
    else if (tempPos >= 17 && tempPos < 29)
        routeSelected = (tempPos + 2);
    else
        routeSelected = (tempPos + 3);
    String temp;
    if (routeSelected < 10)
        temp = ("0") + routeSelected;
    else
        temp = ("") + routeSelected;
    String url = "http://www.ltconline.ca/WebWatch/MobileAda.aspx?r=" + temp;
    new MyInnerClass().execute(url);
    case R.id.route_direction_spinner:

    }

}
于 2012-12-15T21:05:20.207 に答える