【问题标题】:How to implement the prev and next button如何实现上一个和下一个按钮
【发布时间】:2013-10-19 23:32:33
【问题描述】:

我想实现 2 个活动,一个是带有图像和文本的列表视图,现在效果很好。另一个是 onClicklistener,当我单击任何 ListItem 时,它将启动另一个活动以显示更多信息,使用 1 个上一个按钮和下一个按钮来查看上一个信息或下一个。但是按钮有问题。它只能看到上一张和下一张。这意味着您不能两次单击下一步按钮。任何建议将不胜感激。

这是我的主要活动代码

package com.example.manchesterunited;


import com.example.manchesterunited.R;
import android.os.Bundle;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.Intent;

import android.view.View;

import android.widget.ListView;

import android.widget.Toast;

public class MainActivity extends ListActivity  {


static PlayerData data = new PlayerData();

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


CustomAdapter adapter = new CustomAdapter(this);

setListAdapter(adapter);

 }



public void onListItemClick(ListView l,View v, int pos, long id){
    int playerId = (int)id;
    Toast.makeText(getApplicationContext(),"Selected       "+data.getName(pos),Toast.LENGTH_SHORT).show();

    Intent intent = new Intent(this, InfoActivity.class);
    intent.putExtra("playerId", playerId);
    startActivity(intent);

}
 }

这是第二个活动

package com.example.manchesterunited;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class InfoActivity extends Activity  {

TextView dobText;
TextView pobText;   
TextView internationalText;
Button prevButton;
Button nextButton;
PlayerData data = new PlayerData();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_info);

    dobText = (TextView)findViewById(R.id.textView1);
    pobText = (TextView)findViewById(R.id.textView2);
    internationalText = (TextView)findViewById(R.id.textView3);
    prevButton = (Button)findViewById(R.id.prev);
    nextButton =  (Button)findViewById(R.id.next);
    Intent intent = getIntent();
    final int playerId = intent.getExtras().getInt("playerId");  
     dobText.setText("Birthdate:"+String.valueOf(data.getPlayer(playerId).getDob()));
        pobText.setText("Birthplace:"+String.valueOf(data.getPlayer(playerId).getPob()));
        internationalText.setText("International:"+data.getPlayer(playerId).getInternational());


        prevButton.setOnClickListener(new OnClickListener(){

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub

                        int newId = playerId-1;
                         dobText.setText("Birthdate:"+String.valueOf(data.getPlayer(newId).getDob()));
                            pobText.setText("Birthplace:"+String.valueOf(data.getPlayer(newId).getPob()));
                            internationalText.setText("International:"+data.getPlayer(newId).getInternational());

                    }

                });

                nextButton.setOnClickListener(new OnClickListener(){

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub

                        int newId = playerId+1;
                         dobText.setText("Birthdate:"+String.valueOf(data.getPlayer(newId).getDob()));
                            pobText.setText("Birthplace:"+String.valueOf(data.getPlayer(newId).getPob()));
                            internationalText.setText("International:"+data.getPlayer(newId).getInternational());

                    }

                });}





@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_info, menu);
    return true;
}

}

【问题讨论】:

  • 您没有在 playerId 上保存变量 newId 的状态。将 playerId++ 用于 nextButton 和 playerId-- 用于 prevButton 并删除 newId 变量。并将 playerId 声明为 Activity 的属性,而不是 final。

标签: android


【解决方案1】:

您没有更新 playerID。

您只是获得了一个新 ID。

你应该放

int newId = playerId+1;
playerID = newId; //insert this line

这样当你再次点击时,

playerID 得到更新。

【讨论】:

  • 你不能做 playerId = newId;因为 playerId 被声明为 final。
  • 他可以轻松声明另一个全局变量
【解决方案2】:

你总是只添加 1 到玩家 ID,它现在将指向下一个项目。但是,一旦您重新单击该按钮,它将具有通过意图传递的相同玩家 ID。因此,它将再次添加相同的值。创建一个新变量,该变量将存储当前可见的玩家 ID 并继续增加它,然后您将能够浏览下一个,反之亦然。

您不能增加玩家 ID,因为它已被声明为 final,因此您可以创建一个全局变量或将变量放入 Intent 并在按钮点击时增加它。

nextButton.setOnClickListener(new OnClickListener(){
                   @Override
                    public void onClick(View v) 
{
                        // TODO Auto-generated method stub
    //make newId global then it will work. And keep on updating it when the button is clicked accordingly.

                         newId = playerId+1;

                         dobText.setText("Birthdate:"+String.valueOf(data.getPlayer(newId).getDob()));
                            pobText.setText("Birthplace:"+String.valueOf(data.getPlayer(newId).getPob()));
                            internationalText.setText("International:"+data.getPlayer(newId).getInternational());

                    }

                });}

【讨论】:

    【解决方案3】:

    在 InfoActivity 上试试这个,

    private int playerId;
    ...
    ...onCreate(...){
        ...
        playerId = intent.getExtras().getInt("playerId");
        prevButton.setOnClickListener(new OnClickListener(){
              @Override
              public void onClick(View v) {
                 ...
                 playerId--;
                 dobText.setText("Birthdate:"+String.valueOf(data.getPlayer(playerId).getDob()));
                 pobText.setText("Birthplace:"+String.valueOf(data.getPlayer(playerId).getPob()));
                 internationalText.setText("International:"+data.getPlayer(playerId).getInternational());
              }
        }
        nextButton.setOnClickListener(new OnClickListener(){
              @Override
              public void onClick(View v) {
                 ...
                 playerId++;
                 dobText.setText("Birthdate:"+String.valueOf(data.getPlayer(playerId).getDob()));
                 pobText.setText("Birthplace:"+String.valueOf(data.getPlayer(playerId).getPob()));
                 internationalText.setText("International:"+data.getPlayer(playerId).getInternational());
              }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-14
      • 2017-01-11
      • 1970-01-01
      相关资源
      最近更新 更多