Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GridView中的启动计时器_Java_Android_Gridview - Fatal编程技术网

Java GridView中的启动计时器

Java GridView中的启动计时器,java,android,gridview,Java,Android,Gridview,我对GridView有问题 我想有一个网格与图片和每一个都应该是一个计时器。当我点击其中一张图片时,应该会启动它的计时器 如何使TextView和图像适应Gridview,并让TextView每秒更改一次 我现在把代码改成了这个 主要活动 import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.view.View; import android.widget.

我对GridView有问题

我想有一个网格与图片和每一个都应该是一个计时器。当我点击其中一张图片时,应该会启动它的计时器

如何使TextView和图像适应Gridview,并让TextView每秒更改一次

我现在把代码改成了这个

主要活动

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);
        }

    }
一,。在每个单元格中创建包含文本和图像的gridview

请查看GridView的文档:

其中的关键方法是公共视图getViewint位置、视图convertView、视图组父级

该方法为网格中的每个单元格返回一个视图。您可以创建包含TextView和ImageView的XML布局。在适配器的getView方法中膨胀XML布局,附加onClickListener,以便启动计时器并将其作为视图返回

二,。从网格更新TextView

请记住,gridview包含多个视图,每个视图都可以来自同一资源,因此:TextView tvChronometer=TextViewfindViewByIdR.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时保存对它的引用。

我也尝试过类似的方法。问题总是我无法更改TextView如何在网格中调整TextView?使用Imageadapter?如果是这样,我该怎么做?我尝试了很多方法,但都没有成功是的,您可以使用扩展BaseAdapter的任何类创建/更新TextView。如果不进一步了解您遇到的问题并了解代码的其余部分,我将帮不了您多少忙。我建议你看看一些在线的gridview教程:你能再帮我一次吗?现在问题中有我的代码,所以你可能可以帮助mke
<?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"
/>
<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.
//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);