簡體   English   中英

在自定義列表視圖適配器 (kotlin) 中設置默認突出顯示的項目

[英]Set default highlighted item in custom listview adapter (kotlin)

我想默認使用 setItemChecked 來突出顯示列表項。 checkedItemPosition 設置了checkedItemPosition 但不突出顯示項目列表。

這是我的陣列適配器代碼:

class MyListAdapter(
    context: Context,
    private val myItemList: List<Mytem>)
: ArrayAdapter<Mytem>(context, R.layout.item_simple, myItemList) {

override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
    val inflater = context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater

    val rowView: View?

    if (!myItemList[position].isHeader) {
        rowView = inflater.inflate(R.layout.item_simple, parent, false)
        rowView.itemTitle.text = myItemList[position].name
    } else {
        rowView = inflater.inflate(R.layout.item_header_group, parent, false)
        rowView.header.text = myItemList[position].name
    }
    return rowView
}

override fun isEnabled(position: Int): Boolean {
    return !myItemList[position].isHeader
}
}

在片段中,我有以下代碼:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    this.viewModel.myListItem.observe(this, Observer<List<MyItem>> { item ->
        val adapter = MyListAdapter(this.view!!.context, item!!)

        this.view!!.listViewFragment.adapter = adapter
        this.view!!.listViewFragment.divider = null
        this.view!!.listViewFragment.isClickable = true
    })
}

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                          savedInstanceState: Bundle?): View? {
    return inflater.inflate(R.layout.fragment_listview, container, false)
}


override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

    view.validatePenChoiceButton.setOnClickListener {
        viewModel.validate(this.view!!.listViewFragment.checkedItemPosition)
    }
}

列表視圖 cml 代碼:

<ListView
    android:id="@+id/listViewFragment"
    android:layout_width="match_parent"
    android:layout_height="0sp"
    android:layout_weight="30"
    android:choiceMode="singleChoice"
    android:listSelector="@color/item_listSelector_color"
    android:textColor="@color/white" />

我嘗試了以下方法:檢查項已更改,但列表視圖未突出顯示。

  this.view!!.listViewFragment.setItemChecked(3, true)

我對此進行了測試:

  this.view!!.listViewFragment.refreshDrawableState()
  this.view!!.listViewFragment.invalidateViews()

如何正確設置默認突出顯示的項目?

我創建了示例 RecyclerView 適配器。 您可以使用您的視圖代替 TextView 和 setBackgroundColor() 代替 setTextColor()。 您應該在片段中觸發 checkedItem(int) 方法,然后 notifyDataSetChanged 或 notifyItemChanged()

/**
 * Created by beyazid on 11.03.2019.
*/
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {

private Context context;
private LayoutInflater inflater;
private ArrayList<String> list;
private int indexOfHighlightedItem = -1;

public MyAdapter(Context context, ArrayList<String> list) {
    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    this.context = context;
    this.list = list;
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = inflater.inflate(R.layout.my_row_for_recycler_view, parent, false);
    return new MyViewHolder(view);
}

@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
    holder.bindItem(position);
    holder.tvDummy.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            indexOfHighlightedItem = position;
            notifyDataSetChanged();
        }
    });
}

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

public void checkedItem(int pos){
    indexOfHighlightedItem = pos;
}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM