2014-06-07 1 views
0

내 Activity1에 10 개의 항목이있는 ListView가 있습니다. 어떤 항목을 클릭했는지에 따라 StringArray의 일부만 내 다음 활동으로 전달하려고합니다. 전달 된 StringArray를 ArrayAdapter를 통해 GridView에 바인딩하려고합니다.StringArray의 일부를 ListItem 기반의 다음 활동으로 전달하는 방법

첫 번째 문제 : 내가

는 두 번째 문제 내 activity1에의의 ListView에서 클릭 한 항목에 따라, 다음 활동에서 무언가를 전달할 수있는 방법을 이해하지는 : 어떻게 난 단지 부품을 얻을 수 있습니다 내 StringArray My String Array에는 200 개의 항목이 있습니다. 이제는 (Activity1의 itemclick에 따라) 실제로 필요한 항목 만 전달하려고합니다.

는 여기가의 GridView에 내 항목을 결합 할 경우 여기에 activity2에이 내 코드

public class MainActivity extends Activity { 

// ListView items 
String[] provinces = new String[]{ 

     "Prozentrechnung, Terme und Brüche", 
     "Gleichungen", 
     "Ungleichungen und Beträge", 
     "Geraden, Parabeln und Kreise", 
     "Trigonometrie", 
     "Potenzen, Wurzeln und Polynome", 
     "Exponentialfunktionen und Logarithmen", 
     "Trigonometrische Funktionen", 
     "Differenzialrechnung", 
     "Integralrechnung" 
}; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    ListView provincelist = (ListView)findViewById(R.id.lvProvinceNames); 

    //add header to listview 
    LayoutInflater inflater = getLayoutInflater(); 
    ViewGroup header = (ViewGroup)inflater.inflate(R.layout.listheader, provincelist, false); 
    provincelist.addHeaderView(header, null, false); 


    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, provinces); 
    provincelist.setAdapter(adapter); 
    provincelist.setOnItemClickListener(new OnItemClickListener(){ 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      // TODO Auto-generated method stub 

      //we use the items of the listview as title of the next activity 
      String province = provinces[position-1]; 

      //we retrieve the description of the juices from an array defined in arrays.xml 
      String[] provincedescription = getResources().getStringArray(R.array.provincedescription); 
      //List<String> aufgabenListe = new ArrayList<String>(Arrays.asList(provincedescription)); 
      //final String provincedesclabel = provincedescription[position-1]; 

      Intent intent = new Intent(getApplicationContext(), DetailActivity.class); 
      intent.putExtra("position",position); 
      intent.putExtra("province", province); //aktualisieren der Titel in der DetailActivity 
      intent.putExtra("provincedescription", provincedescription); //befüllen der GridView 

      startActivity(intent); 


     } 


    }); 

} 

}

입니다.

public class DetailActivity extends Activity { 

String title; 
String[] array; 
int position; 

//int image; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.detailactivity); 

    TextView tvTitleLabel = (TextView)findViewById(R.id.tvTitleLabel); 
    GridView gridView = (GridView) findViewById(R.id.gridView); 

    ArrayAdapter<String> adapter; 

    Bundle extras = getIntent().getExtras(); 
    position = extras.getInt("position"); 

    if (extras != null) { 

     title = extras.getString("province"); 
     tvTitleLabel.setText(title); 

     /////Fehlermeldung: array = null --> NullPointerException 
     array = extras.getStringArray("provincedescription"); 
     gridView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, array)); 
     gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { 

      } 
     }); 
     //adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, array); 
     //gridView.setAdapter(adapter); 

    } 



} 

}

UPDATE : 여기 당신이, 내가 사용 아마도 당신이 싱글을 살펴해야 원하는 것을 이해한다면 내 문자열 배열

<string-array name="provincedescription"> 
    <item>A1.1</item> 
    <item>A1.2</item> 
    <item>A1.3</item> 
    <item>A1.4</item> 
    <item>A1.5</item> 
    <item>A1.6</item> 
    <item>A1.7</item> 
    <item>A1.8</item> 
    <item>A1.9</item> 
    <item>A1.10</item> 
    <item>A1.11</item> 
    <item>A1.12</item> 
    <item>A1.13</item> 
    <item>A1.13</item> 
    <item>A1.14</item> 
    <item>A2.1</item> 
    <item>A2.2</item> 
    <item>A2.3</item> 
    <item>A2.4</item> 
    <item>A2.5</item> 
    <item>A2.6</item> 
    <item>A2.7</item> 
    <item>A2.8</item> 
    <item>A2.9</item> 
    <item>A2.10</item> 
    <item>A2.11</item> 
    <item>A2.12</item> 
    <item>A3.1</item> 
    <item>A3.2</item> 
    <item>A3.3</item> 
    <item>A3.4</item> 
    <item>A3.5</item> 
    <item>A3.6</item> 
    <item>A3.7</item> 
    <item>A3.8</item> 
    <item>A3.9</item> 
    <item>A3.10</item> 
    <item>A3.11</item> 
    <item>A3.12</item> 
</string-array> 
+0

까지 내가 당신이 데이터를 올바르게 전달하는 것을 볼 수있는 문제가 뭐죠 ?? –

+0

문제는 내 R.array.provincedescription에 200 개의 항목이 있다는 것입니다. 그래서 ListView에서 하나의 항목을 클릭하면이 200 개 항목 중 일부만 필요합니다. 이제 저는 모두 200을 통과합니다. 내 activity1에서 클릭 한 항목에 따라 필요한 항목에 대한 R.array.provincedescription을 어떻게 검색합니까? 그리고 switch case 문없이 – ando

+0

배열을 정적으로 만들고 클래스 이름을 통해 액세스 할 수있는 한 가지 방법은 무엇입니까? –

답변

0

여러분의 XML 파일에서 문자열 배열을 사용하는 것이 더 나은 자원이라면. Java에서 정적 배열을 사용하는 것을 선호합니다. Heres는 샘플 :

public class Constants { 
public static final String[] provinces = new String[] { 

"Prozentrechnung, Terme und Brüche", "Gleichungen", 
     "Ungleichungen und Beträge", "Geraden, Parabeln und Kreise", 
     "Trigonometrie", "Potenzen, Wurzeln und Polynome", 
     "Exponentialfunktionen und Logarithmen", 
     "Trigonometrische Funktionen", "Differenzialrechnung", 
     "Integralrechnung" }; 
} 

는 그럼 난 이렇게 내 수업에서 어디에서 지방에 액세스 할 수 있습니다

String iWant = Constants.provinces[0]; 

매우 중요 참고 정적 객체가 시나리오의 수가 위험과 그들이 일반적으로 메모리에 존재하므로 절대로 사용하지 마십시오.
문자열 배열의 경우 xml에 정의 된 문자열 배열에서 직접 단일 요소를 가져올 수 없습니다. 그게 당신이 먼저 배열에서 모든 요소를 ​​얻을 필요가 :

Resources res = getResources(); 
String[] planets = res.getStringArray(R.array.provincedescription); 
+0

문자열 배열을 업데이트했습니다.예를 들어, 내 listview의 첫 번째 항목을 클릭 한 다음 a1.1, a1.2, a1.3 ... til a1.14에서 stringarray의 항목 만로드하려고합니다. 내 listvw의 secon 항목을 클릭하면 그냥 a2.1, a2.2, a2.3 ... til a2.12 등을로드하려고합니다. 그리고 내 GridView에 넣어. 어쨌든이 문제를 해결할 수 있습니까? 감사합니다 – ando

+0

그냥 당신의 의도에 클릭의 위치를 ​​보내고 다른 활동에서 사용 String iWant = Constants.provinces [clickedFromPrevActivity]; 여기서 clickedFromPrevActivity는 항목이 클릭 된 위치입니다. –

+0

잘못된 인수가 있습니다. 하지만 난 이해가 안 돼 어떻게 stringarray에서 내 항목을 받아 내 gridview을 채울 수 있습니다. 문자열 배열에 내 항목을 넣고 싶다면 200 개 항목으로 수업을 만들지 않을거야. 무슨 뜻인지 이해하면. – ando