C#查找列表中某个字符串的下一个匹配项

时间:2016-06-15 11:31:27

标签: c# android list listview

我试图在动态创建的列表中查找下一个字符串。首先,我创建列表,其中包含将文本保存到txt文件的按钮,然后将文件除以","在列表中,通过单击列表中的项目,我更新列表旁边的textview项。

var it = lstv.GetItemAtPosition(e.Position);给出了开始搜索下一个字符串的位置。下一个字符串是两种可能性之一。

列表创建

string content;
using (var streamReader = new StreamReader(filename))
{
content = streamReader.ReadToEnd();
}
content = content.TrimEnd(',');
char[] delimiterChars = { ',' }; 
data = content.Split(delimiterChars);
var myAdapter = new ArrayAdapter(this, Resource.Layout.TextViewItem, data);
lstv.Adapter = myAdapter;

我发现的建议只得到第一次或最后一次出现,但我有多次出现的值,我需要从点击的位置获得下一次出现

修改 应该提到起始位置和我想要的字符串之间有X个项目。

EDIT2:

列表是这样的:

String 1 or String 2 
String x
String x
String x
String x
String 1 or String 2
String x
String X
String 1 or String 2

我希望获得的下一个字符串1或2之间的字符串x的数量会有所不同。当用户单击String 1/2时,程序需要找到值为String 1或String 2的下一个位置。

哦,是的,它给了一个项目。当我得到下一个必需的字符串时,我可以获得该项目的位置以及接下来需要做的事情。对不起,如果我有点太不清楚了。

EDIT3:

OnListItemClick方法

protected void OnListItemClick(object sender, AdapterView.ItemClickEventArgs e)
    {
        var it = lstv.GetItemAtPosition(e.Position);
        View v = (sender as View);
        int pos = lstv.GetPositionForView(v);
        if (it.ToString().Equals("String1") || it.ToString().Equals("String2")
        {
                /*while (!it.ToString().Equals("String1") || !it.ToString().Equals("String2"))
                {
                    it = lstv.GetItemAtPosition(e.Position + 1);
                    lstv.GetItemAtPosition(e.Position);
                    //lstv.SetSelection(e.Position);
                }*/

                //it = lstv.GetItemAtPosition(e.Position - 1);
                int itt = lstv.SelectedItemPosition;
                txtv.Text = it.ToString();
                txtv2.Text = pos.ToString();
                txtv3.Text = itt.ToString();                
        }
        else
        {
        // Some code here
        }
    }

我尝试使用View v = (sender as View);获取位置,但无论我在列表中单击哪个项目,它总是将位置返回-1。

在列表中,如果我点击第二次出现的字符串1,程序应该找到下一个字符串1或字符串2的项目。找到后,应该给出项目的位置。

如果我只搜索字符串1或2,则while循环有效,但如果我搜索两者,则不会。我可能做了很多错事,但如果我能得到一些帮助,我会很感激。

3 个答案:

答案 0 :(得分:1)

while循环应解决问题......

答案 1 :(得分:1)

  

如果我只搜索字符串1或2,则while循环有效,但如果我搜索两者,则无效。

请记住:!(a || b)与(!a&&!b)相同

因此你应该写:

while (!it.ToString().Equals("String1") && !it.ToString().Equals("String2")) {

答案 2 :(得分:0)

是不是:

  

返回lstv.GetItemAtPosition(e.Position ++);