2016-06-15 1 views
2

動的に作成されたリスト内の文字列の次の出現を見つけようとしています。最初に、テキストをtxtファイルに保存したボタンを使用してリストを作成し、「、」でファイルをリストに入れ、リスト内の項目をクリックすると、リストの横にあるテキストビュー項目が更新されます。C#リスト内の特定の文字列の次の出現を見つけよう

var it = lstv.GetItemAtPosition(e.Position);は、次の文字列の検索開始位置を示します。次の文字列は2つの可能性のうちの1つです。

リスト作成

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; 

私は最初か最後に出現し得る発見したが、私は値が複数回出現があると私はからの次の発生を取得する必要があります提案クリック位置

編集: 開始位置と文字列の間の項目を取得する必要があります。

EDIT2:私は変わる取得したい文字列の次の1または2の間のx文字列の

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 

量:

リストはこのようなものです。ユーザーが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に関係なく、私は、リスト内をクリックしどのような項目の位置を返します。 。

たとえば、2番目の文字列1をクリックすると、プログラムは文字列1または文字列2の次の項目を見つけます。見つかった場合は、その項目の位置が返されます。

私は文字列1または2を検索しますが、両方を検索する場合はwhileループは機能しません。私はおそらく間違ったことをたくさん行っていますが、私が探しているものに少し役立つことができたら、私は感謝するでしょう。

答えて

1

ループが問題を解決するはずです...

0

それは次のようになります。

リターンlstv.GetItemAtPosition(e.Position ++);

+0

は私の編集を確認してください。!これはリストの次の項目を取得するだけです。 – GeeS

+0

whileループを使用しますか? –

+0

必要な文字列を両方使用すると、無限ループになります。 1つの検索可能な文字列では動作します。 – GeeS

1

whileループは、文字列1または2のみを検索しますが、両方を検索する場合は機能しません。

覚えておいてください:(|| b)の(!!B & &)

したがって、あなたが書くべきと同じです:

while (!it.ToString().Equals("String1") && !it.ToString().Equals("String2")) { 
関連する問題