2017-08-08 7 views
0

私の活動には、文字列配列のすべての項目を出力するリストビューがありますが、私がしようとしているのは、文字列の最初の部分だけを表示し、次の作業には2番目の部分が必要です。アクティビティがロードされると、part1 | part2が表示されます。私はそれが最初のアクティビティのロードのために働くことができませんが、OnItemClickListenerのために、それは文字列を分割し、part2を別のアクティビティに送ります。文字列配列xmlリストの各項目を分割して新しいarraylistに追加するにはどうすればいいですか?

<string-array name="test"> 
    <item>Dummy1|test1 test2 test3</item> 
    <item>Dummy2|test4</item> 
    <item>Dummy3|test5</item> 
</string-array> 

私は区切り記号 "|"を使用して文字列を分割しています。

String title, sub_category, part1, part2; 
Bundle bundle; 
String[] sub_category_list, seperated; 
ListView listView; 
Object sub_cat_name; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.subcategory_layout); 

    bundle = getIntent().getExtras(); 
    title = bundle.getString("selected_category"); 

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    toolbar.setTitleTextColor(Color.WHITE); 
    getSupportActionBar().setTitle(title); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

    sub_category_list = getResources().getStringArray(R.array.test); 

    (Print out only the first part of each item. 
    I need a function here that splits each strings) 

    listView = (ListView) findViewById(R.id.sub_category_list); 

    ArrayAdapter<String> adapter = new ArrayAdapter<>(this, R.layout.list_single, R.id.txt, sub_category_list); 
    listView.setAdapter(adapter); 

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      sub_cat_name = listView.getItemAtPosition(position); 
      seperated = sub_cat_name.toString().split("\\|"); 
      part1 = seperated[0]; 
      part2 = seperated[1]; 
      sub_category = sub_cat_name.toString(); 


      Toast.makeText(SubCategory.this, "You clicked at : " + (part2) + (position), Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 

forループを使用して、すべての最初の部分を新しいArrayListに追加しようとしました。

public ArrayList<String> newList; 

    sub_category_list = getResources().getStringArray(R.array.popular); 
    for (String i : sub_category_list){ 
     String[] split1 = i.split("\\|"); 
     String abc = split1[0]; 
     String def = split1[1]; 
     newList.add(abc); 
    } 

    ArrayAdapter<String> adapter = new ArrayAdapter<>(this, R.layout.list_single, R.id.txt, newList); 
    listView.setAdapter(adapter); 
+1

正確な問題は何ですか? –

答えて

0

このような何か試してみてください:それは、値としてキーと第二部として、文字列の最初の部分を取得するマップを初期化し、リストを返します(あなたが使用することができます

Map<String,String> partsMap = new HashMap<>(); 

private ArrayList<String> getFisrtPartString() { 
    ArrayList<String> firstPartStringsList = new ArrayList<>(); 
    ArrayList<String> list = new ArrayList<>(Arrays.asList(getResources().getStringArray(R.array.test))); 

    String firstPart; 
    String secondPart; 

    for(String stringInStringArray : new ArrayList<>(Arrays.asList(getResources().getStringArray(R.array.test)))) { 
     firstPart = stringInStringArray.split("|")[0]; 
     secondPart = stringInStringArray.split("|")[1]; 
     partsMap.put(firstPart, secondPart); 
    } 
    firstPartStringsList.addAll(partsMap.keySet()); 
    return firstPartStringsList; 
} 

をあなたのListView/RecyclerViewアダプタ用)の "文字列の最初の部分"。 文字列の2番目の部分が必要な2番目のフェーズについては、マップの値(この段階では文字列の2番目の部分を含む)を使用して、それを必要とする人に提供する必要があります。

関連する問題