【问题标题】:update a textview in adapter from an activity从活动更新适配器中的文本视图
【发布时间】:2018-09-13 11:09:53
【问题描述】:

当我点击按钮“btn”时,我想从活动SlotsActivity 更新适配器(textViewNum)中的TextView

如何访问TextView ?? 请记住,listItems 不是空的。

这是我的Activity 代码:

public class SlotsActivity extends AppCompatActivity{

private RecyclerView recyclerView;
private MyAdapter adapter;
private List<ListItem> listItems;
private Button btn;

@SuppressLint("WrongViewCast")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_slots);
    recyclerView = findViewById(R.id.recyclerview);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    listItems = new ArrayList<>();
    ....

    btn=findViewById(R.id.btn);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //i want to update the textview here
        }
    });

}

这是我的Adapter

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {

    private List<ListItem> listItems ;
    private Context context;

    public MyAdapter(List<ListItem> listItems, Context context) {
        this.listItems = listItems;
        this.context = context;
    }
    ....

    @Override
    public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
        final ListItem listItem= listItems.get(position);
        //**I want to update this textView**
        holder.textViewNum.setText("N° slot : "+listItem.getNum()+"");
    }
      ....

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

        public TextView textViewNum;

        public ViewHolder(View itemView) {
            super(itemView);
            textViewNum = itemView.findViewById(R.id.textViewNum);
        }
    }
   }

【问题讨论】:

  • 您要更新特定位置的 num 还是所有位置的相同?
  • 您能否指定是要根据位置更改文本,还是要更改recyclerView中的所有文本?
  • @Tepits 我想根据位置更改文本
  • 你有id或者职位要更新吗?

标签: android android-recyclerview android-adapter


【解决方案1】:

一种方法是使用ViewHolder 作为SlotsActivity 的子类,并在父类中声明TextView 变量。 喜欢

public class SlotsActivity extends AppCompatActivity{
private RecyclerView recyclerView;
private MyAdapter adapter;
....
TextView txtView;
.....
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

public ViewHolder(View itemView) {
    super(itemView);
    textView = itemView.findViewById(R.id.textViewNum);
}}}

这样您就可以访问并可以更改TextView 的值。

【讨论】:

  • textview 不是来自当前活动,我的意思是 textview 来自另一个布局,所以不会工作
  • 然后使用bundlesIntent.putExtra(value) 将值存储在btn 点击并在第二个活动中检索bundles
【解决方案2】:

试试这个想法

// i is index of item u want to change text
View v = getViewByPosition(i,listView);
// then check if i is odd set background color with what u want
v.findViewById(R.id.text_view).text("what u want");


public View getViewByPosition(int position, RecyclerView listView) {
final int firstListItemPosition = listView.getFirstVisiblePosition();
final int lastListItemPosition =firstListItemPosition + 
listView.getChildCount() - 1;

if (position < firstListItemPosition || position > lastListItemPosition ) {
return listView.getAdapter().getView(position, 
listView.getChildAt(position), listView);
} else {
final int childIndex = position - firstListItemPosition;
return listView.getChildAt(childIndex);
}
}

【讨论】:

    【解决方案3】:
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
             listItems.add("Apple");
             adapter.notifyDataSetChanged();
            //i want to update the textview here
        }
    });
    

    通过这样做,值将存储在数组列表中。

    希望您在代码中添加以下行。

    adapter = new MyAdapter(listItems,SlotsActivity.this);
    

    希望对你有帮助。

    【讨论】:

      【解决方案4】:

      https://stackoverflow.com/a/52307995/8316499

      查看此链接

      只需在下面用适配器编写的方法中传递您的值

        public void addExploreItem(String item, Arraylist<String> textviewvalues) {
      
      this.textviewvalues = textviewvalues
      count = Integer.parseInt(item);
      notifyDataSetChanged();
      
        }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多