2013-04-09 183 views
2

我有困難讓我的佈局工作...Android的佈局需要幫助

我想要做的是有兩個微調和低於一個按鈕,一旦單擊該按鈕時,我展示成果的基礎上在紡紗機中選擇的值。

----------- 
| Spinner 1 |  
----------- 
----------- 
| Spinner 2 |  
----------- 
----------- 
| Button |  
----------- 

Result 1 
Result 2 
Result 3 
Result 4 
Result 5 

我試圖把結果在ListView,但我面對的問題是,一旦點擊按鈕時,我可以看到Spinner1,Spinner2的重複和多次按鈕本身。

佈局的XML如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

<Spinner 
    android:id="@+id/spinner1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:entries="@array/country_arrays" 
    android:prompt="@string/country_prompt" />  

    <Spinner 
    android:id="@+id/spinner2" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:entries="@array/country_arrays" 
    android:prompt="@string/country_prompt" /> 

<Button 
    android:id="@+id/button1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/done" /> 

<LinearLayout 
    android:id="@+id/moreContent" 
    android:layout_width="match_parent" 
    android:visibility="visible" 
    android:orientation="vertical"  
    android:layout_height="wrap_content"  
    > 

<ListView 
    android:id="@android:id/list" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    /> 

<TextView 
    android:id="@+id/textView2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/hello_world" 
    android:textColor="#ff0000" 
    android:textSize="12sp" /> 

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:contentDescription="@string/hello_world" 
    android:gravity="center_vertical" 
    android:text="@string/hello_world" 
    android:textColor="#0000ff" 
    android:textSize="12sp" /> 
</LinearLayout> 

可有人請告知我要去哪裏錯了?

的代碼如下:

package ms.timetable; 

import java.io.FileNotFoundException; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.Calendar; 
import java.util.Iterator; 
import java.util.Map; 
import java.util.TreeMap; 
import java.util.Map.Entry; 

import android.os.AsyncTask; 
import android.os.Bundle; 
import android.annotation.SuppressLint; 
import android.app.Activity; 
import android.app.ListActivity; 
import android.content.Context; 
import android.util.Log; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.ListAdapter; 
import android.widget.Spinner; 
import android.widget.Toast; 

public class MainActivity extends ListActivity { 
final Context context = this; 

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

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 

public void addListenerOnButton() { 

    Button button = (Button) findViewById(R.id.button1); 

    button.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      RetreiveFeedTask rft = new RetreiveFeedTask(); 
      rft.execute(); 
     } 
    }); 
} 

@SuppressLint("NewApi") 
private class RetreiveFeedTask extends AsyncTask<Void, Void, String> { 

    TreeMap<String, String> _timetable = null; 

    @Override 
    protected String doInBackground(Void... arg0) { 
     // TODO Auto-generated method stub 
     _timetable = FetchTimetableInfo(); 
     return null; 
    } 

    protected void onPostExecute(String str){ 
     if (_timetable != null){ 
      ArrayList<TimeTable> tarr = new ArrayList<TimeTable>(); 

      Iterator<Entry<String, String>> it = _timetable.entrySet().iterator(); 

      String toastText = ""; 

      while (it.hasNext()) 
      { 
       Map.Entry<String, String> pairs = (Map.Entry<String, String>)it.next(); 

       String key = pairs.getKey(); 
       String value = pairs.getValue(); 

       toastText = toastText + key + " --- " + value + "\n"; 
       //System.err.println(key + " --- " + value); 
       TimeTable tt = new TimeTable(); 
       tt.set_line(value); 
       String [] tem = key.split("---"); 

       tt.set_arrival(tem[1]); 
       tt.set_departure(tem[1]); 

       tarr.add(tt); 
      } 

      //Toast.makeText(context, toastText, Toast.LENGTH_LONG).show(); 
      //tmap.add(_timetable); 
      setListAdapter((ListAdapter) new TimetableAdapter(getApplicationContext(), tarr)); 
     } 
    } 

    private TreeMap<String, String> FetchTimetableInfo(){ 
     Spinner spinner1 = (Spinner) findViewById(R.id.spinner1); 
     Spinner spinner2 = (Spinner) findViewById(R.id.spinner2); 
     String origin = (String) spinner1.getSelectedItem(); 
     String destination = (String) spinner2.getSelectedItem(); 
     //String val = String.valueOf(spinner1.getSelectedItem()); 
     ArrayList<String> linesServOrigin = LineStation.GetServingLines(origin); 
     ArrayList<String> linesServDest = LineStation.GetServingLines(destination); 

     linesServOrigin.retainAll(linesServDest); 

     //ArrayList<String> preferredLines = linesServOrigin.re.retainAll(linesServDest); 

     Log.e(this.getClass().toString(), "Selected value is : " + linesServOrigin.get(0)); 

     try 
     { 
      for (int k = 0; k < linesServOrigin.size(); k++) 
      { 
       String url = "http://tt.ptv.vic.gov.au/tt/XSLT_REQUEST?itdLPxx_lineMain=" + LineStation.GetLineMain(linesServOrigin.get(0)) + "&itdLPxx_lineID=" + LineStation.GetLineID(linesServOrigin.get(0)) + "&itdLPxx_output=html"; 

       DataManager dm = new DataManager(url, getApplicationContext()); 

       ArrayList<String> stationData = dm.GetStationsData(); 
       ArrayList<ArrayList<String>> timetableData = dm.GetTimetableData(); 

       ArrayList<String> originTimetable = null; 
       ArrayList<String> originTimetable1 = null; 
       ArrayList<String> destinationTimetable = null; 
       ArrayList<String> destinationTimetable1 = null; 

       int origPos = 0; 
       int destPos = 0; 

       int ctr = 0; 

       for (int i = 0; i < stationData.size(); i++) 
       { 
        if (stationData.get(i).equals(origin) || (origin + " - DEP").equals(stationData.get(i))) 
        { 
         //originTimetable = timetableData[i]; 
         origPos = i; 
        } 
        else if (stationData.get(i).equals(destination) || (destination + " - ARR").equals(stationData.get(i))) 
        { 
         //destinationTimetable = timetableData[i]; 
         destPos = i; 
        } 

        if (origPos != 0 && destPos != 0) 
        { 
         break; 
        } 
       } 

       if (origPos > destPos) 
       { 
        dm.SwitchDirection(); 
        stationData = dm.GetStationsData(); 
        timetableData = dm.GetTimetableData(); 
       } 

       for (int i = stationData.size() - 1; i >= 0; i--) 
       { 
        if (stationData.get(i).equals(origin) || (origin + " - DEP").equals(stationData.get(i))) 
        { 
         if (originTimetable == null) 
         { 
          originTimetable = timetableData.get(i); 
         } 
         else if (originTimetable1 == null) 
         { 
          originTimetable1 = timetableData.get(i); 
         } 
        } 
        else if (stationData.get(i).equals(destination) || (destination + " - ARR").equals(stationData.get(i))) 
        { 
         if (destinationTimetable == null) 
         { 
          destinationTimetable = timetableData.get(i); 
         } 
         else if (destinationTimetable1 == null) 
         { 
          destinationTimetable1 = timetableData.get(i); 
         } 
        } 
       } 

       TreeMap<String, String> ttable = new TreeMap<String, String>();    

       if (originTimetable != null && destinationTimetable != null) 
       { 
        //int curtime = Integer.parseInt(DateTime.Now.ToString("HHmm", CultureInfo.CurrentCulture)); 
        String temp = new SimpleDateFormat("HHmm").format(Calendar.getInstance().getTime()); 

        int curtime =Integer.parseInt(temp); 
        System.err.println("Origin timetable size = " + originTimetable.size()); 
        System.err.println("Destination timetable size = " + destinationTimetable.size()); 

        for (int j = 0; j < originTimetable.size(); j++) 
        { 
         if (Integer.parseInt((originTimetable.get(j))) > curtime) 
         { 
          if (Integer.parseInt((destinationTimetable.get(j))) == -1) 
          { 
           if (destinationTimetable1 == null || (Integer.parseInt(destinationTimetable1.get(j)) == -1)) 
           { 
            continue; 
           } 
          } 
          else if (destinationTimetable1 != null && Integer.parseInt(destinationTimetable1.get(j)) == -1) 
          { 
           if (destinationTimetable == null || (Integer.parseInt(destinationTimetable.get(j)) == -1)) 
           { 
            continue; 
           } 
          } 

          ctr++; 

          if (destinationTimetable1 != null) 
          { 
           if (Integer.parseInt(originTimetable.get(j)) < Integer.parseInt(destinationTimetable1.get(j))) 
           { 
            ttable.put(originTimetable.get(j) + " --- " + destinationTimetable1.get(j), linesServOrigin.get(k)); 
           } 
          } 
          else 
          { 
           if (Integer.parseInt(originTimetable.get(j)) < Integer.parseInt(destinationTimetable.get(j))) 
           { 
            ttable.put(originTimetable.get(j) + " --- " + destinationTimetable.get(j), linesServOrigin.get(k)); 
           } 
          } 

          if (ctr == 5) 
          { 
           break; 
          } 
         } 
        } 

        ctr = 0; 

        if (originTimetable1 != null) 
        { 
         for (int j = 0; j < originTimetable1.size(); j++) 
         { 
          if (originTimetable1 != null && Integer.parseInt(originTimetable1.get(j)) > curtime) 
          { 

           if (Integer.parseInt(destinationTimetable.get(j)) == -1) 
           { 
            if (destinationTimetable1 == null || (Integer.parseInt(destinationTimetable1.get(j)) == -1)) 
            { 
             continue; 
            } 
           } 
           else if (destinationTimetable1 != null && Integer.parseInt(destinationTimetable1.get(j)) == -1) 
           { 
            if (destinationTimetable == null || (Integer.parseInt(destinationTimetable.get(j))) == -1) 
            { 
             continue; 
            } 
           }         

           ctr++; 

           if (destinationTimetable1 != null) 
           { 
            if (Integer.parseInt(originTimetable1.get(j)) < Integer.parseInt(destinationTimetable1.get(j))) 
            { 
             ttable.put(originTimetable1.get(j) + " --- " + destinationTimetable1.get(j), linesServOrigin.get(k)); 
            } 
           } 
           else 
           { 
            if (Integer.parseInt(originTimetable1.get(j)) < Integer.parseInt(destinationTimetable.get(j))) 
            { 
             ttable.put(originTimetable1.get(j) + " --- " + destinationTimetable.get(j), linesServOrigin.get(k)); 
            } 
           } 

           if (ctr == 5) 
           { 
            break; 
           } 
          } 
         } 
        } 

        Iterator<Entry<String, String>> it = ttable.entrySet().iterator(); 

        //foreach (KeyValuePair<String, List<String>> item in lineStations) 
        while (it.hasNext()) 
        { 
         Map.Entry<String, String> pairs = (Map.Entry<String, String>)it.next(); 

         String key = pairs.getKey(); 
         String value = pairs.getValue(); 

         System.err.println(key + " --- " + value); 
        } 

        return ttable; 
       } 
      } 


     } catch (ParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     return null; 
    } 
} 

class TimeTable{ 
    private String _departure, _arrival, _line; 

    public TimeTable(){  
    } 

    public TimeTable(String departure, String arrival, String line){ 
     _departure = departure; 
     _arrival = arrival; 
     _line = line;   
    } 

    public String get_departure() { 
     return _departure; 
    } 

    public void set_departure(String _departure) { 
     this._departure = _departure; 
    } 

    public String get_arrival() { 
     return _arrival; 
    } 

    public void set_arrival(String _arrival) { 
     this._arrival = _arrival; 
    } 

    public String get_line() { 
     return _line; 
    } 

    public void set_line(String _line) { 
     this._line = _line; 
    } 
} 
} 

適配器如下:

package ms.timetable; 

import java.util.ArrayList; 
import ms.timetable.MainActivity.TimeTable; 

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.TextView; 

public class TimetableAdapter extends ArrayAdapter<TimeTable>{ 
private final Context context; 
private final ArrayList<TimeTable> values; 

public TimetableAdapter(Context context, ArrayList<TimeTable> values){ 
    super(context, R.layout.activity_main, values); 
    this.context = context; 
    this.values = values; 
} 

public View getView(int position, View convertView, ViewGroup parent) { 
    LayoutInflater inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    View rowView = inflater.inflate(R.layout.activity_main, parent, false); 
    TextView textView = (TextView) rowView.findViewById(R.id.textView1); 
    TextView textView2 = (TextView) rowView.findViewById(R.id.textView2); 

    //System.err.println("Position is : "+position); 
    TimeTable tt = values.get(position); 
    textView.setText(tt.get_departure()); 
    textView2.setText(tt.get_arrival()); 
    return rowView; 
} 

} 
+0

我想我們需要看你的代碼,也不理解'textView1'和'textView2'的作用。不過,我認爲你的'LinearLayout'看起來不錯。 – 2013-04-09 05:10:09

+0

我已編輯帖子並添加了代碼。謝謝。 – user2260040 2013-04-09 06:20:20

回答

0

的問題是由於

View rowView = inflater.inflate(R.layout.activity_main, parent, false); 

getView()方法。

你正在充滿整個activity_main在一行,然後將其添加到列表視圖。 將結果放在單獨的xml中而不是activity_main中。所以,你將有一個新的XML文件說,row.xml其中將包含:

<TextView 
    android:id="@+id/textView2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/hello_world" 
    android:textColor="#ff0000" 
    android:textSize="12sp" /> 

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:contentDescription="@string/hello_world" 
    android:gravity="center_vertical" 
    android:text="@string/hello_world" 
    android:textColor="#0000ff" 
    android:textSize="12sp" /> 

所以,你將不得不誇大爲

View rowView = inflater.inflate(R.layout.row, parent, false); 

,然後添加在這是在列表視圖生成的行activity_main.xml中。 所以你的問題將得到解決。希望能幫助到你。

+0

非常感謝。這就是我想要的。 – user2260040 2013-04-09 12:10:56