Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.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
Android 如何在同一活动中多次单击按钮_Android_Android Recyclerview - Fatal编程技术网

Android 如何在同一活动中多次单击按钮

Android 如何在同一活动中多次单击按钮,android,android-recyclerview,Android,Android Recyclerview,我在RecyclerView中有TextView和按钮,当我点击按钮时,我把按钮上的文本作为数字,当我尝试递归setonclicklistener时,我希望该数字增加1。应用程序不工作 我有两个活动,每个活动都调用同一个适配器 适配器的代码 public class AzkaarAdapter extends RecyclerView.Adapter<AzkaarAdapter.AzkaarViewHolder> { ArrayList<AzkarForm&g

我在
RecyclerView
中有
TextView
按钮
,当我点击按钮时,我把
按钮上的文本作为数字,当我尝试递归
setonclicklistener
时,我希望该数字增加1。应用程序不工作 我有两个活动,每个活动都调用同一个适配器 适配器的代码

    public class AzkaarAdapter extends RecyclerView.Adapter<AzkaarAdapter.AzkaarViewHolder>  {
    ArrayList<AzkarForm> azkarForms=new ArrayList<AzkarForm>();
    Context ctx;

    private static ItemClickCallback itemClickCallback;

    public interface ItemClickCallback {
        void onItemClick(int p);
        void onSecondaryIconClick(int p);
    }

    public void setItemClickCallback(final ItemClickCallback itemClickCallback) {
        this.itemClickCallback = itemClickCallback;
    }
    public  AzkaarAdapter (ArrayList<AzkarForm> azkarForms,Context ctx){
        this.azkarForms=azkarForms;
        this.ctx=ctx;
    }
    @Override
    public AzkaarViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        AzkaarViewHolder azkaarViewHolder;
        if(ctx instanceof MainActivity){
        View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_layout,parent,false);
         azkaarViewHolder=new AzkaarViewHolder(view,ctx,azkarForms);
        }
        else {
            View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_details,parent,false);
             azkaarViewHolder=new AzkaarViewHolder(view,ctx,azkarForms);
        }
        return azkaarViewHolder;
    }


    @Override
    public void onBindViewHolder(AzkaarViewHolder holder, int position) {

        AzkarForm azkarForm=azkarForms.get(position);
        if(ctx instanceof MainActivity) {
            holder.sample.setText(azkarForm.getComplete_morning());
            holder.number.setText(String.valueOf(azkarForm.getNumber()));
        }else {
            holder.sample.setText(azkarForm.getComplete_morning());
            holder.tally_count.setText(getTextNumber(azkarForm.getNumber()));

        }

    }

    public String getTextNumber(int number){
        String numberText="";
        switch (number){
            case 1:
                numberText="مرة واحدة";
                break;
            case 3:
                numberText="ثلاث مرات";
                break;
            case 4:
                numberText="أربع مرات";
                break;
            case 7:
                numberText="سبع مرات";
                break;
            case 10:
                numberText="عشر مرات";
                break;
            case 100:
                numberText="مائة مرة";
                break;
        }
        return numberText;

    }


    @Override
    public int getItemCount() {
        return azkarForms.size();
    }

    public static  class AzkaarViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

        TextView sample, number;
        View container;
        Context ctx;
        ArrayList<AzkarForm> azkarForms = new ArrayList<AzkarForm>();
        Button tally_count,press,next;


        public AzkaarViewHolder(View itemView, Context ctx, ArrayList<AzkarForm> azkarForms) {
            super(itemView);
            this.ctx = ctx;


            //itemView.setOnClickListener(this);
            this.azkarForms = azkarForms;
            if(this.ctx instanceof MainActivity) {
                sample = (TextView) itemView.findViewById(R.id.sample);
                number = (TextView) itemView.findViewById(R.id.number);
                container = itemView.findViewById(R.id.container);
                container.setOnClickListener(this);
            }else {
                sample = (TextView) itemView.findViewById(R.id.sample);
                tally_count=(Button)itemView.findViewById(R.id.count);
                press=(Button)itemView.findViewById(R.id.press);
                press.setOnClickListener(this);
                next=(Button)itemView.findViewById(R.id.next);
            }
            //container.setOnClickListener(this);



        }


        @Override
        public void onClick(View v) {


            if (v.getId() == R.id.container){
                itemClickCallback.onItemClick(getAdapterPosition());
            } else {
                itemClickCallback.onSecondaryIconClick(getAdapterPosition());
            }

            /*if(Build.VERSION.SDK_INT >=Build.VERSION_CODES.LOLLIPOP){
                Pair<View, String> p1 = Pair.create((View)sample, "qoute");

                ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, p1);
            }*/


        }
    }

}
第二项活动

  recyclerView =(RecyclerView) findViewById(R.id.recyclerviewcard);
        layoutManager=new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setHasFixedSize(true);
        adapter=new AzkaarAdapter(AzkaarData.getArrayListData(),this);
        recyclerView.setAdapter(adapter);

        adapter.setItemClickCallback(this);

        toolbar=(Toolbar)findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
    }

     @Override
    public void onItemClick(int p) {
        //int position=getAdapterPosition();
        AzkarForm azkarForm= list.get(p);
        Intent intent=new Intent(this,DetailsActivity.class);
        intent.putExtra("numbers",azkarForm.getNumber());
        intent.putExtra("sample",azkarForm.getSample());
        intent.putExtra("complete",azkarForm.getComplete_morning());
        intent.putExtra("position",p);
        this.startActivity(intent);
    }

    @Override
    public void onSecondaryIconClick(int p) {

    }
recyclerView =(RecyclerView) findViewById(R.id.recyclerviewcard);
    layoutManager=new LinearLayoutManager(DetailsActivity.this,LinearLayoutManager.HORIZONTAL,false);
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setHasFixedSize(true);
    recyclerView.scrollToPosition(pos);
    adapter=new AzkaarAdapter(AzkaarData.getArrayListData(),this);
    recyclerView.setAdapter(adapter);
    SnapHelper snapHelper = new LinearSnapHelper();
    snapHelper.attachToRecyclerView(recyclerView);


    toolbar=(Toolbar)findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

}

@Override
public void onItemClick(int p) {

}

@Override
public void onSecondaryIconClick(int p) {

    AzkarForm azkarForm= list.get(p);
    press=(Button) findViewById(R.id.press);
    int currentNum=Integer.parseInt(press.getText().toString());
    int num=azkarForm.getNumber();

    if(currentNum<num){
        currentNum++;
        onSecondaryIconClick(p);
    }

    press.setText(String.valueOf(currentNum));


}
recyclerView =(RecyclerView) findViewById(R.id.recyclerviewcard);
    layoutManager=new LinearLayoutManager(DetailsActivity.this,LinearLayoutManager.HORIZONTAL,false);
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setHasFixedSize(true);
    recyclerView.scrollToPosition(pos);
    adapter=new AzkaarAdapter(AzkaarData.getArrayListData(),this);
    recyclerView.setAdapter(adapter);
    SnapHelper snapHelper = new LinearSnapHelper();
    snapHelper.attachToRecyclerView(recyclerView);
    toolbar=(Toolbar)findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

}

@Override
public void onItemClick(View v, int position) {
   switch(v.getId()) {
      case R.id.press:
          AzkarForm azkarForm= list.get(position);
          int currentNum=Integer.parseInt(press.getText().toString());
          int num = azkarForm.getNumber();
              if(currentNum < num){
                 currentNum++;
              }
          v.setText(String.valueOf(currentNum));
          break;
}
recyclerView=(recyclerView)findViewById(R.id.recyclerviewcard);
layoutManager=新建LinearLayoutManager(DetailsActivity.this,LinearLayoutManager.HORIZONTAL,false);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setHasFixedSize(true);
循环视图。滚动位置(pos);
adapter=new-AzkaarAdapter(AzkaarData.getArrayListData(),this);
recyclerView.setAdapter(适配器);
SnapHelper SnapHelper=新的LinearSnapHelper();
snapHelper.attachToRecyclerView(recyclerView);
toolbar=(toolbar)findviewbyd(R.id.toolbar);
设置支持操作栏(工具栏);
}
@凌驾
公共空间和MClick(INTP){
}
@凌驾
第二次单击上的公共无效(int p){
AzkarForm=list.get(p);
按下=(按钮)findViewById(R.id.press);
int currentNum=Integer.parseInt(按.getText().toString());
int num=azkarForm.getNumber();
if(currentNum

根据您的布局替换按钮id。

好的,首先,您不需要使用
第二个IConclick
回调,因为您希望它执行其他操作并不意味着您需要两个按钮id,您可以为这两个活动设置相同的
ItemCallback
接口,然后调用
switch
语句以了解情况从布局中单击了哪个小部件。我可以更轻松地向您展示您提供的代码,我没有测试任何代码。

从我所看到的第一个
活动
,运行良好(我假设这不会引起问题)。除了可读性之外,我建议为该
活动
初始化
上下文
私有上下文上下文=此
)的全局实例,然后代替
新意图(this,DetailsActivity.class)
您应该有
新的意图(context,DetailsActivity.class)
,因为有时候
这个
可以指向
ClickListener
而不是
活动

对于第二个
活动
计数器
按钮
设置文本
的逻辑似乎很好,除非您已经在
视图持有者
中初始化了
按钮
,因此您不需要在单击侦听器中再次初始化它。您所要做的就是将视图传递给侦听器呃。(请参见我对
适配器
ViewHolder
代码的编辑)另外,如果
currentNum
,我不知道为什么要调用click事件的新实例

你想让点击一直自动到某个数字,还是每次点击直到某个数字

无论如何,让我们来为您解决这个问题。我在编写此代码时假设您希望每次用户单击
R.id.press
时计数器都会上升

FirstActivity

  recyclerView =(RecyclerView) findViewById(R.id.recyclerviewcard);
        layoutManager=new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setHasFixedSize(true);
        adapter=new AzkaarAdapter(AzkaarData.getArrayListData(),this);
        recyclerView.setAdapter(adapter);

        adapter.setItemClickCallback(this);

        toolbar=(Toolbar)findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
    }

     @Override
    public void onItemClick(int p) {
        //int position=getAdapterPosition();
        AzkarForm azkarForm= list.get(p);
        Intent intent=new Intent(this,DetailsActivity.class);
        intent.putExtra("numbers",azkarForm.getNumber());
        intent.putExtra("sample",azkarForm.getSample());
        intent.putExtra("complete",azkarForm.getComplete_morning());
        intent.putExtra("position",p);
        this.startActivity(intent);
    }

    @Override
    public void onSecondaryIconClick(int p) {

    }
recyclerView =(RecyclerView) findViewById(R.id.recyclerviewcard);
    layoutManager=new LinearLayoutManager(DetailsActivity.this,LinearLayoutManager.HORIZONTAL,false);
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setHasFixedSize(true);
    recyclerView.scrollToPosition(pos);
    adapter=new AzkaarAdapter(AzkaarData.getArrayListData(),this);
    recyclerView.setAdapter(adapter);
    SnapHelper snapHelper = new LinearSnapHelper();
    snapHelper.attachToRecyclerView(recyclerView);


    toolbar=(Toolbar)findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

}

@Override
public void onItemClick(int p) {

}

@Override
public void onSecondaryIconClick(int p) {

    AzkarForm azkarForm= list.get(p);
    press=(Button) findViewById(R.id.press);
    int currentNum=Integer.parseInt(press.getText().toString());
    int num=azkarForm.getNumber();

    if(currentNum<num){
        currentNum++;
        onSecondaryIconClick(p);
    }

    press.setText(String.valueOf(currentNum));


}
recyclerView =(RecyclerView) findViewById(R.id.recyclerviewcard);
    layoutManager=new LinearLayoutManager(DetailsActivity.this,LinearLayoutManager.HORIZONTAL,false);
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setHasFixedSize(true);
    recyclerView.scrollToPosition(pos);
    adapter=new AzkaarAdapter(AzkaarData.getArrayListData(),this);
    recyclerView.setAdapter(adapter);
    SnapHelper snapHelper = new LinearSnapHelper();
    snapHelper.attachToRecyclerView(recyclerView);
    toolbar=(Toolbar)findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

}

@Override
public void onItemClick(View v, int position) {
   switch(v.getId()) {
      case R.id.press:
          AzkarForm azkarForm= list.get(position);
          int currentNum=Integer.parseInt(press.getText().toString());
          int num = azkarForm.getNumber();
              if(currentNum < num){
                 currentNum++;
              }
          v.setText(String.valueOf(currentNum));
          break;
}
因此,正如我上面所建议的,更改上下文引用

 @Override
    public void onItemClick(View v, int position) {
        switch (v.getId()) {
            case R.id.container: 
             AzkarForm azkarForm= list.get(position);
             Intent intent=new Intent(context, DetailsActivity.class);
             intent.putExtra("numbers",azkarForm.getNumber());
             intent.putExtra("sample",azkarForm.getSample());
             intent.putExtra("complete",azkarForm.getComplete_morning());
             intent.putExtra("position", position);
             context.startActivity(intent);
            break;
    }
第二活动

  recyclerView =(RecyclerView) findViewById(R.id.recyclerviewcard);
        layoutManager=new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setHasFixedSize(true);
        adapter=new AzkaarAdapter(AzkaarData.getArrayListData(),this);
        recyclerView.setAdapter(adapter);

        adapter.setItemClickCallback(this);

        toolbar=(Toolbar)findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
    }

     @Override
    public void onItemClick(int p) {
        //int position=getAdapterPosition();
        AzkarForm azkarForm= list.get(p);
        Intent intent=new Intent(this,DetailsActivity.class);
        intent.putExtra("numbers",azkarForm.getNumber());
        intent.putExtra("sample",azkarForm.getSample());
        intent.putExtra("complete",azkarForm.getComplete_morning());
        intent.putExtra("position",p);
        this.startActivity(intent);
    }

    @Override
    public void onSecondaryIconClick(int p) {

    }
recyclerView =(RecyclerView) findViewById(R.id.recyclerviewcard);
    layoutManager=new LinearLayoutManager(DetailsActivity.this,LinearLayoutManager.HORIZONTAL,false);
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setHasFixedSize(true);
    recyclerView.scrollToPosition(pos);
    adapter=new AzkaarAdapter(AzkaarData.getArrayListData(),this);
    recyclerView.setAdapter(adapter);
    SnapHelper snapHelper = new LinearSnapHelper();
    snapHelper.attachToRecyclerView(recyclerView);


    toolbar=(Toolbar)findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

}

@Override
public void onItemClick(int p) {

}

@Override
public void onSecondaryIconClick(int p) {

    AzkarForm azkarForm= list.get(p);
    press=(Button) findViewById(R.id.press);
    int currentNum=Integer.parseInt(press.getText().toString());
    int num=azkarForm.getNumber();

    if(currentNum<num){
        currentNum++;
        onSecondaryIconClick(p);
    }

    press.setText(String.valueOf(currentNum));


}
recyclerView =(RecyclerView) findViewById(R.id.recyclerviewcard);
    layoutManager=new LinearLayoutManager(DetailsActivity.this,LinearLayoutManager.HORIZONTAL,false);
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setHasFixedSize(true);
    recyclerView.scrollToPosition(pos);
    adapter=new AzkaarAdapter(AzkaarData.getArrayListData(),this);
    recyclerView.setAdapter(adapter);
    SnapHelper snapHelper = new LinearSnapHelper();
    snapHelper.attachToRecyclerView(recyclerView);
    toolbar=(Toolbar)findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

}

@Override
public void onItemClick(View v, int position) {
   switch(v.getId()) {
      case R.id.press:
          AzkarForm azkarForm= list.get(position);
          int currentNum=Integer.parseInt(press.getText().toString());
          int num = azkarForm.getNumber();
              if(currentNum < num){
                 currentNum++;
              }
          v.setText(String.valueOf(currentNum));
          break;
}
ViewHolder

您的新单击侦听器应如下所示:

        @Override
        public void onClick(View v) {
           if (itemClickCallback != null) {
                itemClickCallback.onItemClick(v, getAdapterPosition());
            /*if(Build.VERSION.SDK_INT >=Build.VERSION_CODES.LOLLIPOP){
                Pair<View, String> p1 = Pair.create((View)sample, "qoute");

                ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, p1);
            }*/
            }
        }
    }
@覆盖
公共void onClick(视图v){
如果(itemClickCallback!=null){
itemClickCallback.onItemClick(v,getAdapterPosition());
/*if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.LOLLIPOP){
Pair p1=Pair.create((视图)示例,“qoute”);
ActivityOptions Compat options=ActivityOptions Compat.MakeScenetTransitionAnimation(此为p1);
}*/
}
}
}
现在,您为侦听器提供了一个干净的框架,并且正在传递正确的
视图
并调用正确的
上下文
,您可以相应地应用逻辑,而不会混淆
回调


希望这能有所帮助。

我尝试过这个概念,但我需要多次执行按钮单击。它工作正常,但当我返回到recyclerview并单击它时,当我在第二个活动中删除适配器集时,它没有响应。它可以工作。您可以扩展您遇到的问题吗?当我单击第一个活动中的任何项目时,第二个活动是launch但当返回到第一个活动以单击另一个项目时,单击未响应时的事件,我试图在第二个活动中删除将侦听器设置为适配器的设置,然后单击第一个活动将响应I put adapter.setItemClickCallback(此);在onResume()中方法和它的工作。谢谢你的帮助,你让我比以前更了解活动和界面之间的关系。我很高兴我能提供帮助。愉快的编码。