2014-07-03 32 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