标签: android-viewholder

如何正确实现ListView的适配器

我有一个ListView,Fragment我希望更新ListView从另一个返回时的数据Activity.我已经覆盖了该onResume()方法Fragment,修改了数据Adapter并调用notifyDataSetChanged()Adpater但不知何故ListView没有更新.我怀疑我的身体有问题Adapter,但我似乎无法找到错误.

这是我的代码Adpater:

class ManualExceptionsListAdapter extends BaseAdapter {

    private LayoutInflater mInflater;
    private TextView mManualExceptions;
    SwitchCompat mSwitch;
    TextView name;
    final Context context = getActivity();
    final SharedPreferences mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
    int a;
    int ifUse = 0;

    ManualExceptionsListAdapter(LayoutInflater inflater) {
        mInflater = inflater;
    }

    @Override
    public int getCount() {
        return (mPermanentManualException.size()+mContactsExceptionNumber.size());
    }

    @Override
    public Object getItem(int i) {
        return null; …
Run Code Online (Sandbox Code Playgroud)

android android-listview android-viewholder recycler-adapter android-recyclerview

3
推荐指数
1
解决办法
2035
查看次数

RecyclerView - 在Activity中获取Position而不是RecyclerViewAdapter

现在是我处理查看点击次数的第三天.我最初使用ListView,然后我切换到RecyclerView.我已经android:onclick为我的每个控件添加了元素row_layout,我在这样处理它们MainActivity:

public void MyMethod(View view) {}
Run Code Online (Sandbox Code Playgroud)

在我的旧ListView实现中,我已经完成setTag(position)了通过在其中MyMethod执行此操作来获取它:

Integer.parseInt(view.getTag().toString())
Run Code Online (Sandbox Code Playgroud)

这很好地没有问题.虽然现在我正在处理RecyclerView并被迫使用ViewHolder,但没有提供setTag方法.搜索了2个小时后,我发现人们使用setTag这样的:

holder.itemView.setTag(position)
Run Code Online (Sandbox Code Playgroud)

这是可以接受的.虽然当我尝试MyMethod使用该行从函数中获取值时:

Integer.parseInt(view.getTag().toString())
Run Code Online (Sandbox Code Playgroud)

应用程序崩溃.我已经阅读了适配器内部onclick处理的几个实现,但是我必须使用它,MainActivity因为我使用的是该活动所特有的东西.

TL; DR我想以MainActivity简单的方式将点击的行的位置发送给我.

编辑:我为这个混乱道歉,因为我的主题不是很彻底.我有一个RecyclerView适配器.适配器链接到我的row_layout.这个row_layoutxml有一个根LinearLayout.里面有一个TextView,另一个LinearLayout(有两个TextViews)和一个Button(为简单起见).我不想像处理点击RecylerView那样处理点击ListView.所以,我决定添加一个android:onclick用于每个控制,然后链接TextViewLinearLayout到一个单一的方法和链接Button(和将来ButtonS)其独特的方法.我缺少的是我希望能够在我的每个接收方法上说出立场MainActivity.如果我必须链接来自适配器的所有内容并进入MainActivity单个onclick处理程序,那就这样吧.虽然,我怎么知道哪个控件触发了点击? …

android android-viewholder android-recyclerview

3
推荐指数
1
解决办法
7802
查看次数

RecyclerView 中的项目未按预期对齐

我的应用程序有一个包含 recyclerview 的聊天活动。这个 recyclerview 包含两个项目,分别显示用户收到的消息和用户发送的消息。

用户收到的消息按预期从 recyclerview 的左侧对齐,但用户发送的消息没有按预期从 recyclerview 的右侧对齐。

这是它现在的样子:蓝色消息是收到的消息,灰色消息是发送的消息。 聊天活动的当前用户界面

我需要 ui 的外观: 我希望灰色消息从屏幕右侧对齐,如下图所示。 在此处输入图片说明

代码

activity.java 文件:

public class IMActivity extends AppCompatActivity{

    private RecyclerView recyclerView;
    private ImAdapter imAdapter;
    private List<ChatMsg> chatMsgList = new ArrayList<>();
    Socket mSocket;
    EditText etIM;
    ImageButton ibSend;
    String otherUserName;
    List<Msg> msgList;
    DBAct db;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_im);
        Toolbar toolbar = (Toolbar)findViewById(R.id.imlist_toolbar);
        setSupportActionBar(toolbar);

        etIM = (EditText)findViewById(R.id.et_im);
        recyclerView = (RecyclerView)findViewById(R.id.rv_im);
        imAdapter = new ImAdapter(chatMsgList);
        LinearLayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
        layoutManager.setStackFromEnd(true);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setAdapter(imAdapter);

        db = …
Run Code Online (Sandbox Code Playgroud)

android android-layout android-viewholder android-recyclerview

3
推荐指数
1
解决办法
4682
查看次数

无法调用 runOnUiThread()

我有一个名为 的片段MyRequestFragment,其中包含使用我的适配器类RecyclerView将数据绑定到RecyclerViewusing的片段onBindViewHolder()

现在每个ViewHolder我都有一个按钮。并且每次单击按钮都会POST向服务器发出请求并更新值。我的问题是,如果出现成功响应,我需要隐藏特定ViewHolder.

实际问题是runOnUiThread()不接受onBindViewHolder()

runOnUiThread(new Runnable() {
    public void run() {

    }
});
Run Code Online (Sandbox Code Playgroud)

我如何在ViewHolder创建/绑定方法中调用它。

我的onBindViewHolder()完整代码如下供参考。

@Override
    public void onBindViewHolder(MyServiceViewHolder holder, int position) {
        final MyServiceBean myServiceBean = serviceList.get(position);
        holder.service_name.setText(myServiceBean.getService_name());
        holder.last_updated.setText("Job Updated Date : " +myServiceBean.getDate(myServiceBean.getUpdated_at()));
        holder.created_date.setText("Job Created Date : " + myServiceBean.getDate(myServiceBean.getCreated_at()));
        holder.status.setText(myServiceBean.getStatus());
        holder.service_note.setText("Service Note : " + myServiceBean.getService_note());
        if (myServiceBean.getService_note().toString().isEmpty())
            holder.service_note.setVisibility(View.GONE);

        switch (myServiceBean.getStatus().toString().toLowerCase()) {
            case "completed":
                holder.status.setBackgroundColor(Color.GREEN);
                break; …
Run Code Online (Sandbox Code Playgroud)

android android-viewholder okhttp3

3
推荐指数
1
解决办法
1249
查看次数

Android Kotlin中的ViewHolder中的getActivity()/上下文

我正在为片段构建ViewHolder和适配器,并且当我尝试为ViewHolder创建OnClick时,我没有传递任何上下文。没有activity距离getActivity(),我可以使用,并且p0!!.context也没有itemView.context工作,要么。我应该从哪里获取我的上下文,以及如何引用它?

package com._________.criminalintent

import android.os.Bundle
import android.support.v4.app.Fragment
import android.support.v7.widget.LinearLayoutManager
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import android.widget.Toast

class CrimeListFragment: Fragment() {
    private var mCrimeRecyclerView: RecyclerView? = null
    private var mAdapter: CrimeAdapter? = null

    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    // fragment_crime_list.xml has a RecyclerView element = crime_recycler_view
    // inflate the fragment into the activity
        val view = inflater!!.inflate(R.layout.fragment_crime_list, container, false)

        // grab the recyclerView …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-viewholder kotlin-android-extensions

3
推荐指数
1
解决办法
2万
查看次数

如何通过单击每个项目中的复选框滚动到下一个项目(recyclerview)

请原谅我的英语。

我的清单包含 100 项。每个项目由两个复选框组成,每次单击复选框时我都想滚动到下一个项目。

请给我最佳答案链接 如果这个问题已经被回答

这是我的自定义适配器

 public class CustomAdapter extends 
       RecyclerView.Adapter<CustomAdapter.MyViewHolder> {

private ArrayList answerFirst;
private ArrayList answerSecond;
private Context context;

public CustomAdapter(Context  context, ArrayList questionList, ArrayList 
answerFirst, ArrayList answerSecond) {
    this.context = context;
    this.answerFirst = answerFirst;
    this.answerSecond = answerSecond;
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = 
    LayoutInflater.from(parent.getContext()).inflate(R.layout.test_items, 
    parent, false);
    return new MyViewHolder(v);
}

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

        holder.firstanswer.setText(answerFirst.get(position).toString());
        holder.secondanswer.setText(answerSecond.get(position).toString());
    }

@Override
public int getItemCount() {
    return questionList.size(); …
Run Code Online (Sandbox Code Playgroud)

android custom-adapter android-viewholder android-recyclerview

3
推荐指数
1
解决办法
5146
查看次数

为什么setAlpha()在RecyclerViews中不起作用?

我试图根据某些用户输入更改RecyclerView中项目视图的透明度。

if (quantity>0) {
    holder.itemView.setAlpha((float) 1);
} else {
    holder.itemView.setAlpha((float) 0.65);
}
Run Code Online (Sandbox Code Playgroud)

当数量> 0时,将alpha从0.65更改为1效果很好。但是在另一种情况下,反向操作无效。调试时,它清楚地显示了经过这条线。holder.itemView.setAlpha((float) 0.65);但是,alpha不会减少。关于发生了什么的任何线索?

transparency android android-view android-viewholder android-recyclerview

3
推荐指数
3
解决办法
453
查看次数

将 onClickListener 设置为 onBindViewHolder 中的整个项目

我有一个RecyclerView Adapter,我想将其设置onClick为整个项目,但此代码以及当我也尝试使用myViewHolder.view.setOnClickListener(..)两者时,仍然只听复选框的单击。

我怎样才能设置onClickListener为整体item

public class DeliveryPointSelectionAdapter extends RecyclerView.Adapter<DeliveryPointSelectionAdapter.MyViewHolder> {
    private static final String TAG = MyViewHolder.class.getSimpleName();
    private List<DeliveryPoint> deliveryPointList;

    interface OnItemCheckListener {
        void onItemCheck(DeliveryPoint deliveryPoint);
        void onItemUncheck(DeliveryPoint deliveryPoint);
    }

    @NonNull
    private OnItemCheckListener onItemCheckListener;

    public DeliveryPointSelectionAdapter(List<DeliveryPoint> deliveryPointList, @NonNull OnItemCheckListener onItemCheckListener) {
        this.deliveryPointList = deliveryPointList;
        this.onItemCheckListener = onItemCheckListener;
    }

    @NonNull
    @Override
    public DeliveryPointSelectionAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.dialog_select_deliverypoints_to_change_item, viewGroup, false);
        return new MyViewHolder(view);
    }

    @Override
    public void …
Run Code Online (Sandbox Code Playgroud)

android onclicklistener android-viewholder android-recyclerview

3
推荐指数
1
解决办法
1084
查看次数

3
推荐指数
1
解决办法
731
查看次数

ViewHolder在偶数和奇数位置充气布局

我需要使用ViewHolder基于listview项目的偶数和奇数位置来扩展两个布局.在偶数位置,我需要不同的布局,在奇数位置,另一个具有相同的元素但布局不同.我实现了它,然而,它给了我在不同位置的随机布局,而不管它们的位置如何.需要做些什么来解决它.谢谢.

public SimpleAdapter(ArrayList<WishListData> wishDataList, Context context,
        ListView swipelistview) {
    super(context, android.R.layout.simple_list_item_1, wishDataList);
    notifyDataSetChanged();
    SimpleAdapter.wishListData = wishDataList;
    this.swipelistview = swipelistview;

    mPreferences = new Preferences(context);
    SCREEN_WIDTH = mPreferences.getScreenWidth();
    SCREEN_HEIGHT = mPreferences.getScreenHeight();
    mFunctions = new UserFunctions();
    this.context = context;
    imageloader1 = new ImageLoader1(context);
    userImageLoader = new UserImageLoader(context); 

}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {

    ViewHolder viewHolder = null;
    View row = convertView;
    if (row == null) {
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        System.out.println("position "+ position);
        if ((position % …
Run Code Online (Sandbox Code Playgroud)

android android-listview android-viewholder

2
推荐指数
1
解决办法
2827
查看次数