0

当每行长按时,我的 ListView 实现 ContextMenu。

我决定包含更多用逗号分隔的静态数据以及从 ArrayList 中获取的每个字符串以填充 contextMenu - 它工作正常。

旧 ListView,新 ListView

我的问题是如何在我的自定义适配器中正确使用子字符串,以便只有第一个值(在第一个逗号之前)出现在 Listview 中?

我尝试使用类似下面的方法在 p.getName() 上使用 .split,但收效甚微。

String[] temp;
for (String s: selectedItems) {
   temp = s.split(" ");

这是我的 getViews 代码:

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

    View v = convertView;
    NameHolder holder = new NameHolder();
        // First let's verify the convertView is not null
    if (convertView == null) {
        // This a new view we inflate the new layout
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = inflater.inflate(R.layout.imgbtn_row_layout, null);
        // Now we can fill the layout with the right values
        TextView tv = (TextView) v.findViewById(R.id.name);
        TextView distView = (TextView) v.findViewById(R.id.dist);
        ImageButton btnFave = (ImageButton) v.findViewById(R.id.btnone);
        ImageButton btnBuy = (ImageButton) v.findViewById(R.id.btntwo);

        holder.nameView = tv;
        holder.distView = distView;
        holder.btnFave = btnFave;
        holder.btnBuy = btnBuy;

        btnFave.setTag(position);
        btnBuy.setTag(position);

        v.setTag(holder);
    } else {
        holder = (NameHolder) v.getTag();
    }
    final Name p = namesList.get(position);


    String grabbitall = p.getName();
    int cpos = grabbitall.indexOf(",");
    int lcpos = grabbitall.lastIndexOf(",");
    String beginName = grabbitall.substring(0, cpos);
    String endNames = grabbitall.substring(beginName.length(), lcpos-1);
    String eqiuvNames = grabbitall.substring(beginName.length(), grabbitall.length());

    Spannable namesToSpan = new SpannableString(beginName + eqiuvNames);
    namesToSpan.setSpan(new ForegroundColorSpan(Color.TRANSPARENT), beginName.length(), ((beginName.length()+1) + endNames.length()+1), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

    holder.nameView.setText(p.getName());
    holder.distView.setText("" + p.getDistance());

    holder.btnFave.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (toggleListener != null) {
                toggleListener.onToggleClickListner(position, p.getName());
            }
        }

    });

    holder.btnBuy.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (customListener != null) {
                customListener.onButtonClickListener(position, p.getName());
            }
        }
    });

    final EditText edit = (EditText) v.findViewById(R.id.txtName);
    StringBuilder sb = new StringBuilder();
    SharedPreferences shrdpref = context.getSharedPreferences("namesSpelled", 1);
    SharedPreferences.Editor editr = shrdpref.edit();
    String initialName="xxx";

    // Extract the default initial value stored in SharedPreferences
    String value = shrdpref.getString("namesSpelled", initialName);

    // Append to the extracted value
    String appendedValue =  value + sb.append(selectedName);
    String allvalues = shrdpref.getString("namesSpelled", appendedValue);

    if (allvalues.contains(p.getName())) {
        holder.btnFave.setAlpha(0.2f);
    } else {
        holder.btnFave.setAlpha(1.0f);
    }
       String[] temp;
    final Name s = namesList.get(position);

    String grabbitall = p.getName();
    int cpos = grabbitall.indexOf(",");
    int lcpos = grabbitall.lastIndexOf(",");
    String beginName = grabbitall.substring(0, cpos);
    String endNames = grabbitall.substring(beginName.length(), lcpos-1);
    String eqiuvNames = grabbitall.substring(beginName.length(), grabbitall.length());

    Spannable namesToSpan = new SpannableString(beginName + eqiuvNames);
    namesToSpan.setSpan(new ForegroundColorSpan(Color.TRANSPARENT), beginName.length(), ((beginName.length()+1) + endNames.length()+1), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

    notifyDataSetChanged();
    return v;
}
4

2 回答 2

0

您可以使用 indexOf 获取逗号的索引:

int pos = s.indexOf(",");

他们在 0 和这个 pos - 1 之间做一个子串:

String name = s.substring(0, pos-1); 
于 2016-04-05T12:02:40.233 回答
0

我通过这样做解决了这个问题:

final Planet p = planetList.get(position);

String grabAll= p.getName();
int cpos = grabAll.indexOf(",");
int lcpos = grabAll.lastIndexOf(",");
String beginStr= grabAll.substring(0, cpos);
String endStr= grabAll.substring(beginStr.length(), lcpos-1);
String eqiuvNStr = grabAll.substring(beginStr.length(), grabAll.length());

Spannable namesToSpan = new SpannableString(beginStr+ eqiuvStr);
namesToSpan.setSpan(new ForegroundColorSpan(Color.BLUE), beginStr.length(), ((beginStr.length()+1) + endStr.length()+1), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

holder.nameView.setText(namesToSpan);

然后我使用了一个 SPANNABLE 来不同地处理每个字符串的部分(开头和结尾)。ForegroundColorSpan 中的颜色会覆盖 textView 中设置的颜色。

于 2016-04-06T00:52:58.723 回答