我最终决定使用的设计如下:
该应用程序有一个您可以选择和阅读的文章/内容/条目列表。我们有一个根活动和一个标题视图。在根活动中,我创建了一个类来保存关于每篇文章的信息,现在是两个资源 ID。一个 ID 用于在 title-view 活动中显示的布局,另一个用于文章的字符串资源。我还重写了 toString() 以返回文章标题字符串。 ArrayAdapter 能够在列表中显示文章名称至关重要。
现在每次我添加一篇文章时,我都应该:
- 在字符串资源中为其命名。
- 为其创建布局。
- 通过“新建”(实例化)ArticleClass 将其添加到应用程序中的文章数组中。
当用户选择一篇文章时,我会创建一个意图并将两个资源 IDS 添加到其附加内容中。
代码如下:
package com.siavoshkc.x;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.TintResources;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class RootActivity extends AppCompatActivity {
ListView rootListView;
class TitleEntry{
int layout_resID;
int str_resID;
TitleEntry(int name, int ID){
layout_resID= name;
str_resID=ID;
}
@Override
public String toString(){
return getResources().getString(str_resID);
}
}
final TitleEntry[] entry_items = {new TitleEntry(R.layout.title_data_input, R.string.TITLE_DATA_INPUT)};
RootActivity t = this;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_root);
ArrayAdapter<?> rootListArrAdapter = new ArrayAdapter<TitleEntry>(getApplication(),R.layout.list_text_view,R.id.list_view_text_element, entry_items);
rootListView = (ListView) findViewById(R.id.rootListView);
rootListView.setAdapter(rootListArrAdapter);
rootListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Intent toViewTitle = new Intent(t, EntryView.class);
//toViewTitle.putExtra(getString(R.string.TITLE_NO), position);
toViewTitle.putExtra(getString(R.string.TITLE_LAYOUT_ID), entry_items[position].layout_resID);
toViewTitle.putExtra(getString(R.string.TITLE_STRING_ID), entry_items[position].str_resID);
startActivity(toViewTitle);
}
});
}
}
还有 EntryView 活动:
package com.siavoshkc.x;
import android.content.Intent;
import android.os.Bundle;
import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
public class EntryView extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
//RootActivity root = (RootActivity) getParent();
//RootActivity.TitleEntry[] entry_list=root.GetEntryList();
//int iNo = intent.getIntExtra(getString(R.string.TITLE_NO), -1);
int strID = intent.getIntExtra(getString(R.string.TITLE_STRING_ID), -1);
int layoutID = intent.getIntExtra(getString(R.string.TITLE_LAYOUT_ID), -1);
setTitle(strID);
setContentView(layoutID);
}
}