【问题标题】:C# Find next occurrence of a certain string in a listC# 查找列表中某个字符串的下一次出现
【发布时间】:2016-10-16 11:55:35
【问题描述】:

我正在尝试在动态创建的列表中查找下一次出现的字符串。首先,我使用将文本保存到 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 个项目。

编辑2:

列表是这样的:

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 的位置。

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

编辑3:

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 循环有效,但如果我同时搜索两者则无效。我可能做错了很多事情,但如果我能在寻找什么方面得到一点帮助,我将不胜感激。

【问题讨论】:

    标签: c# android list listview


    【解决方案1】:

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

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

    因此你应该写:

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

    【讨论】:

      【解决方案2】:

      while 循环应该可以解决问题...

      【讨论】:

        【解决方案3】:

        会不会:

        return lstv.GetItemAtPosition(e.Position++);

        ?

        【讨论】:

        • 检查我的编辑。这只会获取列表中的下一项。
        • 你会使用while循环吗?
        • 嗯,如果我使用两个必需的字符串,它只会进入无限循环。但只要使用一个可搜索的字符串,它就可以工作。
        • 也许你应该再写一次你的问题,因为我一遍又一遍地阅读它并且不明白。您写了“我正在尝试查找下一个字符串”是下一次出现 string1 还是 string2 ?您写了“var it = lstv.GetItemAtPosition(e.Position);给出了位置”但它给出了一个项目而不是一个位置......
        • 您在 while 循环中是正确的。我的代码中存在一些问题,稍后我将编辑一个工作代码 sn-p。谢谢!
        猜你喜欢
        • 1970-01-01
        • 2015-10-08
        • 2021-02-25
        • 2021-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-27
        • 1970-01-01
        相关资源
        最近更新 更多