2014-07-03 75 views
0

我對GridView有問題。在GridView中啓動計時器

我想有一個網格與圖片,並在他們每個人應該是一個計時器。當我點擊其中一個圖像時,應該啓動它的定時器。

我該如何將TextViews和圖像調整到Gridview並讓TextView每秒更改一次。

現在我改變了我的代碼,這

MainActivity

import android.app.Activity; 
import android.os.Bundle; 
import android.os.Handler; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.GridView; 
import android.widget.Toast; 

import java.util.ArrayList; 

public class MainActivity extends Activity implements Runnable{ 
    /** The Constant INTERVALL. */ 
    private static final int INTERVALL = 1000; 

    private ImageAdapter mAdapter; 
    private ArrayList<String> listText; 
    private ArrayList<Integer> listImage; 
    private GridView gridView; 

    /** The handler. */ 
    private Handler handler = new Handler(); 

    public boolean timerRuns = false; 
    public int time ; 
    /** 
    * Called when the activity is first created. 
    */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.grid); 

     //GridView gridview = (GridView) findViewById(R.id.gridview); 
     //gridview.setAdapter(new ImageAdapter(this)); 

     prepareList(); 

     // prepared arraylist and passed it to the Adapter class 
     mAdapter = new ImageAdapter(this, listText, listImage); 

     // Set custom adapter to gridview 
     gridView = (GridView) findViewById(R.id.gridView); 
     gridView.setAdapter(mAdapter); 

     // Implement On Item click listener 
     gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() 
     { 
      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int position, 
            long arg3) { 
       Toast.makeText(MainActivity.this, mAdapter.getItem(position), Toast.LENGTH_SHORT).show(); 
      } 
     }); 

    } 

    @Override 
    public final void run() { 
     chronometer(); 
    } 

    public void startTimer(View v) { 
     timerRuns = true; 
     time = 5*60; 
     update(); 
     this.handler.postDelayed(this, INTERVALL); 
    } 

    public void stopTimer(View v) { 
     timerRuns = false; 
     handler.removeCallbacks(this); 
    } 


    public void chronometer(){ 
     time = time -1; 
     update(); 
     handler.postDelayed(this, INTERVALL); 
    } 

    private void update(){ 
     updateScreen(); 
    } 

    private void updateScreen(){ 
     //TextView tvChronometer = (TextView)findViewById(R.id.tvChronometer); 
     //tvChronometer.setText(Integer.toString(time)); 
    } 







     public void prepareList() 
     { 
      listText = new ArrayList<String>(); 

      listText.add("Sample"); 
      listText.add("Brazil"); 
      listText.add("Canada"); 
      listText.add("China"); 
      listText.add("France"); 
      listText.add("Germany"); 
      listText.add("Iran"); 
      listText.add("Italy"); 
      listText.add("Japan"); 
      listText.add("Korea"); 
      listText.add("Mexico"); 
      listText.add("Netherlands"); 
      listText.add("Portugal"); 
      listText.add("Russia"); 
      listText.add("Saudi Arabia"); 
      listText.add("Spain"); 
      listText.add("Turkey"); 
      listText.add("United Kingdom"); 
      listText.add("United States"); 

      listImage = new ArrayList<Integer>(); 
      listImage.add(R.drawable.sample_0); 
      listImage.add(R.drawable.sample_3); 
      listImage.add(R.drawable.sample_3); 
      listImage.add(R.drawable.sample_7); 
      listImage.add(R.drawable.sample_1); 
      listImage.add(R.drawable.sample_6); 
      listImage.add(R.drawable.sample_2); 
      listImage.add(R.drawable.sample_7); 
      listImage.add(R.drawable.sample_4); 
      listImage.add(R.drawable.sample_5); 
      listImage.add(R.drawable.sample_0); 
      listImage.add(R.drawable.sample_5); 
      listImage.add(R.drawable.sample_0); 
      listImage.add(R.drawable.sample_2); 
      listImage.add(R.drawable.sample_1); 
      listImage.add(R.drawable.sample_4); 
      listImage.add(R.drawable.sample_3); 
      listImage.add(R.drawable.sample_1); 
      listImage.add(R.drawable.sample_6); 
     } 

    } 

的ImageAdapter

`public class ImageAdapter extends BaseAdapter { 
private ArrayList<String> listText; 
private ArrayList<Integer> listImage; 
private Activity activity; 

public ImageAdapter(Activity activity,ArrayList<String> listText, ArrayList<Integer> listImage) { 
    super(); 
    this.listText = listText; 
    this.listImage = listImage; 
    this.activity = activity; 
} 



@Override 
public int getCount() { 

    return listText.size(); 
} 

@Override 
public String getItem(int position) { 

    return listText.get(position); 
} 

@Override 
public long getItemId(int position) { 

    return 0; 
} 

public static class ViewHolder 
{ 
    public ImageView imgView; 
    public TextView txtView; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    ViewHolder view; 
    LayoutInflater inflator = activity.getLayoutInflater(); 

    if(convertView==null) 
    { 
     view = new ViewHolder(); 
     convertView = inflator.inflate(R.layout.element, null); 

     view.txtView = (TextView) convertView.findViewById(R.id.eText); 
     view.imgView = (ImageView) convertView.findViewById(R.id.eImage); 

     convertView.setTag(view); 
    } 
    else 
    { 
     view = (ViewHolder) convertView.getTag(); 
    } 

    view.txtView.setText(listText.get(position)); 
    view.imgView.setImageResource(listImage.get(position)); 

    return convertView; 
} 

}` 我的GridView

<?xml version="1.0" encoding="utf-8"?> 
<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/gridView" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:columnWidth="110dp" 
android:numColumns="auto_fit" 
android:verticalSpacing="10dp" 
android:horizontalSpacing="10dp" 
android:stretchMode="columnWidth" 
android:gravity="center" 
/> 

和我的e lement.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:orientation="vertical" 
android:padding="5dp" > 

<ImageView 
    android:id="@+id/eImage" 
    android:layout_width="120dp" 
    android:layout_height="120dp" 
    android:src="@color/Bisque" > 
</ImageView> 

<TextView 
    android:id="@+id/eText" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="5dp" 
    android:textSize="15sp" > 
</TextView> 

I hope you can help me. 

回答

0

1.創建與每個細胞

文本和圖像的GridView控件在爲GridView控件的文檔看看: http://developer.android.com/guide/topics/ui/layout/gridview.html

關鍵的方法有:public View getView(int position, View convertView, ViewGroup parent)

該方法返回網格中每個單元格的視圖。您可以創建一個包含TextView和ImageView的XML佈局。在適配器的getView方法中擴充XML佈局,附加onClickListener,以便啓動計時器並將其作爲視圖返回。

2.從電網更新的TextView

請記住,一個GridView包含有多個視圖,每個可能來自相同的資源,以便本:TextView tvChronometer = (TextView)findViewById(R.id.tvChronometer);不會在GridView工作。

您需要做的是從您需要的單元格獲取特定視圖(或遍歷所有單元格)並更新視圖。事情是這樣的:

//First get the view for the cell assuming it's a composite view 
View cellView = (TextView) gridview.getChildAt(position); 

//Then get the actual TextView from that grid cell 
TextView tvChronometer = cellView.findViewById(R.id.tvChronometer); 

雖然在我看來,最好的辦法是參考保存到TextView的在適配器當您在創建/實例化它。

+0

我試過類似的東西。問題總是讓我無法修改TextView –

+0

如何修改Grid中的Textview?用Imageadapter?如果它那麼我該怎麼做呢?我嘗試了很多東西,但沒有任何工作 –

+0

是的,您可以使用擴展BaseAdapter的任何類來創建/更新TextView。如果不知道更多關於您遇到的問題並看到其他代碼,我無法幫助您。我建議你看看在線提供的幾個gridview教程:http://www.androidhive.info/2012/02/android-gridview-layout-tutorial/和http://www.mkyong.com/android/android -gridview-example/ – swbandit