2017-03-27 12 views
1

私はJavaとAndroidが初めてです。私はアプリを作っている(主に私のために使用して、いくつかの知識を得るために)、私はリストビュー幅101の項目を持っている。あるアイテムをクリックすると、別のレイアウトで新しいアクティビティが開始されます。 101項目のそれぞれのレイアウトは同じですが、内容は異なります。私の質問です:すべてのアイテムに対して1つの.xmlファイルを作成できますが、クリックされたアイテムに基づいてコンテンツが異なるようにすることはできますか?複数のアクティビティ用に1つのlayout.xml

私は以下のコードを追加します(非常に実験的で、確かにレイアウトを変更します):)ありがとうございました!

MainAvtivity.java

public class MainActivity extends AppCompatActivity { 
ListView listView; 

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

    listView = (ListView) findViewById(R.id.list); 
    String[] values = new String[]{"§01. Kongle", "§02. Binders", 
      "§03. Plaster", "§04. Kvitering", "§05. 'Ruter'-logo", "§06. Ølkork", "§07. Hjerteutklipp av russekort", 
      "§08. Ølkork i gull", "§09. Bussbillett", "§10. Bit av et sitteunderlag", "§11. Signatur fra helsesøster", 
      "§12. Skolens logo", "§13. Første bokstav", "§14. Bit av skilt", "§15. Bit av burgereske", "§16. Fjær", "§16. Bilde av Barney Stinson", 
      "§17. Stoffbit", "§18. Champagnekork i gull", "§19. Billettarmbånd", "§20. Amnesty-logo", "§21. Plastskje", "§22. Mobildeksel", 
      "§24. Legokloss", "§25. Tampong", "§26. Kritt", "§27. Undertøy", //Plus more 
    }; 

    ArrayAdapter<String> adapter = new ArrayAdapter<>(this, 
      android.R.layout.simple_list_item_activated_2, android.R.id.text1, values); 

    listView.setAdapter(adapter); 

    listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View view, 
           int position, long id) { 
      if (position == 0) { 
       Intent myIntent = new Intent(view.getContext(), fastnokkel.class); 
       startActivityForResult(myIntent, 0); 
      } 

      if (position == 1) { 
       Intent myIntent = new Intent(view.getContext(), binders.class); //These classes will differ from witch item is clicked. 
       startActivityForResult(myIntent, 0); 
      } 

      if (position == 2) { 
       Intent myIntent = new Intent(view.getContext(), plaster.class); 
       startActivityForResult(myIntent, 0); 
      } 

      if (position == 3) { 
       Intent myIntent = new Intent(view.getContext(), plaster.class); 
       startActivityForResult(myIntent, 0); 
      } 

      if (position == 4) { 
       Intent myIntent = new Intent(view.getContext(), kongle.class); 
       startActivityForResult(myIntent, 0); 
      } 

      if (position == 5) { 
       Intent myIntent = new Intent(view.getContext(), binders.class); 
       startActivityForResult(myIntent, 0); 
      } 

      if (position == 6) { 
       Intent myIntent = new Intent(view.getContext(), kongle.class); 
       startActivityForResult(myIntent, 0); 
      } 

      if (position == 7) { 
       Intent myIntent = new Intent(view.getContext(), binders.class); 
       startActivityForResult(myIntent, 0); 
      } 
     } 
    }); 
} 

Avtivity_Main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:background="#fff" 
android:orientation="vertical" 
tools:context="com.example.sande.listview8.MainActivity" 
android:weightSum="1"> 

<ListView 
    android:id="@+id/list" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent"> 
</ListView> 

Same_Layout_Different_Content.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<ImageView 
    android:id="@+id/imageView2" 
    android:layout_width="150dp" 
    android:layout_height="150dp" 
    android:contentDescription="@string/bildeBesk" 
    app:srcCompat="@drawable/kongle" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" /> 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_below="@+id/imageView2" 
    android:layout_centerHorizontal="true"> 

    <TextView 
     android:id="@+id/gjenstand" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentEnd="true" 
     android:layout_alignParentRight="true" 
     android:text="@string/kongle" 
     android:textSize="35sp" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" /> 

    <TextView 
     android:id="@+id/gjoremaal" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentEnd="true" 
     android:layout_alignParentRight="true" 
     android:layout_below="@+id/gjenstand" 
     android:layout_marginTop="19dp" 
     android:textSize="30sp" 
     android:text="@string/kongleBeskrivelse" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" /> 
</RelativeLayout> 

答えて

0

うん、1つのXMLファイル内のビューのすべての種類を置きます。この構造のように:

<ParentLayout> 
    <Type1/> 
    <Type2/> 
    ...... 
</ParentLayout> 

[すべてのタイプ]レイアウトを[非表示]にします。次に、親アクティビティでアイテムをクリックすると、一意のIDを渡してレイアウトタイプを識別します。次に、2番目のアクティビティでスイッチケースを使用して、必要なレイアウトをアクティブにします。

+0

ありがとう! 私は2つのテキストビューを持つxmlファイルを持っています。 私はこれもxml filleのアクティビティにあります: 'switch(position){ case 0: textView =(TextView)findViewById(R.id.gjenstand); textView.setVisibility(View.VISIBLE); 休憩。 ケース1: textView =(TextView)findViewById(R.id.gjoremaal); textView.setVisibility(View.VISIBLE); } ' は、MainActivityを拡張しています。 MainActivityから値 "Position"を取得するにはどうすればよいですか? PositionはonItemClickListenerのパラメータです。 –

+0

あなたのmainactivityのアイテムで、Intent i = new Intent(MainActivity.this、NextActivity.class)を作成したリスナーをクリックします。 startActivity(i); i.putExtra( "position"、YOUR_LAYOUT_POSITION)を追加するだけです。 startActivity(i)の前に。 –

+0

ありがとうございます!私はそれが働くようになった!私もifループをforループで置き換えましたが、これは101 ifを持つよりも優れていますか、それとも私のアプリケーションが遅くなりますか? –

0

あなたがする必要があるのは、BaseAdapterを継承するカスタムアダプターを使用することです。

このアダプターは、各セルの視覚的な部分を自分の位置に従って更新し、単一のxmlの要素を表示/非表示にすることができます。例えば

public class MyAdapter extends BaseAdapter { 
     String[] values = new String[]{"§01. Kongle", "§02. Binders", 
     "§03. Plaster", "§04. Kvitering", "§05. 'Ruter'-logo", "§06. Ølkork", "§07. Hjerteutklipp av russekort", 
     "§08. Ølkork i gull", "§09. Bussbillett", "§10. Bit av et sitteunderlag", "§11. Signatur fra helsesøster", 
     "§12. Skolens logo", "§13. Første bokstav", "§14. Bit av skilt", "§15. Bit av burgereske", "§16. Fjær", "§16. Bilde av Barney Stinson", 
     "§17. Stoffbit", "§18. Champagnekork i gull", "§19. Billettarmbånd", "§20. Amnesty-logo", "§21. Plastskje", "§22. Mobildeksel", 
     "§24. Legokloss", "§25. Tampong", "§26. Kritt", "§27. Undertøy", //Plus more 
     }; 

    @Override 
    public int getCount() { 
     return values.length; 
    } 

    @Override 
    public Object getItem(int i) { 
     return values[i]; 
    } 

    @Override 
    public long getItemId(int i) { 
     return i; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup viewGroup) { 
     if (convertView == null) { 
      Context context = parent.getContext(); 
      convertView = LayoutInflater.from(context).inflate(R.layout.item, parent, false); 
      convertView.setTag(new ViewHolder()); 
     } 

     // Here you set the view - set the text hide views etc... it would be beneficial to use ViewHolder pattern as well 
     ViewHolder holder = convertView.getTag(); 
     holder.setData(i, values[i]); 
    } 
} 
関連する問題