我是Java和Android的新手。我正在制作一个应用程序(主要供我使用并获得一些知识),其中我有一个列表视图宽度101项。当我单击一个项目时,它会启动一个具有不同布局的新活动。 101个项目中每个项目的布局相同,但内容不同。我的问题是:我可以为所有项目制作一个.xml文件,但根据点击的项目使内容不同?
我将在下面添加我的代码(非常实验性,肯定会改变布局):)谢谢你的答案!
MainAvtivity.java
Trail
Avtivity_Main.xml
Location
Same_Layout_Different_Content.xml
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);
}
}
});
}
答案 0 :(得分:0)
是的,将所有类型的视图放在一个xml文件中。就像在这个结构中一样:
<ParentLayout>
<Type1/>
<Type2/>
......
</ParentLayout>
将所有类型布局的可见性保持为Gone。然后,当在父活动中单击项目时,传递唯一ID以标识布局类型。然后在第二个活动中使用开关盒来激活必要的布局。
答案 1 :(得分: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]);
}
}