2014-12-10 3 views
0

내 프로그램에는 클릭하면 클릭 한 항목에 대한 정보를 표시하는 listview가 있어야합니다. 내 문제는 내가 클릭 한 항목의 이름을 새 활동을 시작하는 의도의 추가로 첨부했다는 것입니다. 표시해야하는 정보는 문자열 배열로 저장됩니다. Intent에서받은 문자열을 사용하여 문자열 배열을 찾아 자바로 가져와야합니다. 누군가 이걸로 나를 도울 수 있습니까? 감사합니다. .문자열에서 ID를 가진 리소스 가져 오기

MainActivity.java

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v7.app.ActionBarActivity; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ListView; 


public class MainActivity extends ActionBarActivity{ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ListView listview = (ListView) findViewById(R.id.stationlist); 
    listview.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> l, View v, int position, long id) { 
      String[] stations = getResources().getStringArray(R.array.stations); 
      String station_name = stations[position] + "_timings"; 
      Intent intent = new Intent(MainActivity.this, Station_timings.class); 
      intent.putExtra("stationwithtime", station_name); 
      intent.putExtra("position", position); 
      startActivity(intent); 
    }; 
    }); 
    } 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 
    if (id == R.id.action_settings) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
} 

Station_timings.class

import android.content.res.Resources; 
import android.os.Bundle; 
import android.support.v7.app.ActionBarActivity; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 

public class Station_timings extends ActionBarActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_station_timings); 
    String station_name = getIntent().getStringExtra("stationwithtime"); 
    int position = getIntent().getIntExtra("position", 0); 
    TextView tv = (TextView) findViewById(R.id.textview); 
    Resources res = getResources(); 
    String[] array = getResources().getStringArray(R.array.stations); 
    tv.setText(station_name); 
    int arrayid = res.getIdentifier(station_name, "array" , this.getPackageName()); 
    String[] array2 = res.getStringArray(arrayid); 
    ListView listView = new ListView(this); 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,  R.layout.activity_station_timings, array); 
    listView.setAdapter(adapter); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.station_timings, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 
    if (id == R.id.action_settings) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
} 

strings.xml의 당신의 예에서

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

<string-array name="stations" style="@style/names_of_stations"> 
    <item name="Oceanside">Oceanside Station</item> 
    <item name="San Clemente">San Clemente Station</item> 
    <item name="San Juan Capistrano">San Juan Capistrano Station</item> 
    <item name="Irvine">Irvine Station</item> 
    <item name="Tustin">Tustin Station</item> 
    <item name="Santa Ana">Santa Ana Station</item> 
    <item name="Orange">Orange Station</item> 
    <item name="Anaheim">Anaheim Station</item> 
    <item name="Fullerton">Fullerton Station</item> 
    <item name="Buena Park">Buena Park Station</item> 
    <item name="Santa Fe Springs/Norwalk">Santa Fe Springs/Norwalk Station</item> 
    <item name="Commerce">Commerce Station</item> 
    <item name="Los Angeles">Los Angeles Union Station</item> 
</string-array> 
<string-array name ="oceanside"> 
    <item name="1"> 5:45 </item> 
    <item name="2"> 6:30 </item> 
</string-array> 
<string-array name ="station_timings"> 
    <item name="1"> wrong </item> 
    <item name="2"> wrong </item> 
</string-array> 
<string name="title_activity_station_timings">Station_timings</string> 
<string name="hello_world">Hello world!</string> 
<string name="action_settings">Settings</string> 

</resources> 
+1

사용중인 관련 코드를 게시하십시오 – silversunhunter

답변

0

을 변수 station_name는 문자열 "Oceanside Station" 포함됩니다. 그런 다음 이름 "Oceanside Station"으로 string-array에 대한 리소스 식별자를 얻을하려고합니다

res.getIdentifier(station_name, "array" , this.getPackageName()); 

을 요구하고있다. "oceanside"이라는 string-array을 제공했습니다. 일치하지 않습니다.

JSON 문서, XML 문서, CSV 파일 등과 같이 데이터를 저장하는 데 더 구조화 된 형식을 사용하는 것이 좋습니다. 그런 다음이를 프로그램에 실제 객체로 읽어 들여 처리하기가 훨씬 쉬워집니다.

+0

도와 주시겠습니까? 나는 프로그래밍에 대해 많이 알지 못하고 있으며 막 시작하고있다. 내가 뭘해야할지 몰랐기 때문에 배열을 사용했습니다. –