ListViewのTextView動的獲得について
ListViewに対して内部的に作成した配列をtextViewに入れて表示をさせているのですが、更なる疑問が上がってきたので質問させていただきます。簡潔に言うと、動的に複数のtextをListView上に配置したい、というものです。
前回の質問→アンドロイドのListViewの背景について
AndroidSDKのsimple_list_item_multiple_choiceから自作したcustom_row.xmlを用いることにしました。
現状ArrayAdapter(context,int resource,int textViewResourceId,ArrayList) を用いており、第三引数にtextViewのIDを指定しています。その為、第三引数のtextViewのみが動的に動く形となっています。これを複数に増やしたいのですが、最も良い方法を探しております。自分の乏しい知識を駆使して調べたこと、考えたことを以下に箇条書きで記しておきます。
・引数が一つしか取れないことが問題である。
→ArrayAdapter ではないAdapterを実装する必要がある?⇒SimpleAdapterも考えました。
→動的に配置したい配列を二次元配列にする⇒対応するtextViewに上手く入れることができない。
・HashMapを用いてkeyとvalueをタグ付けして持ってくる
⇒並列するものが関連性の低いものなのでマップで関連付けするのはできれば避けたい。
どうぞ、よろしくお願いします。
以下に作ったコードを記しておきます。
MainActivity.java
public class MainActivity extends AppCompatActivity {
final String[] baseArray ={"ApplePie", "BananaBread", "CupCake", "Donut", "Eclair", "Froyo",
"GingerBread", "Honeycomb", "IcecreamSandwich","JellyBean", "KitKat", "Lollipop", "Marshmallow", "Nougat", "Oreo", "Popcorn"};
ListView list1;
Button btn1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {Snackbar.make(view, "Replace with your own action",Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
findView();
ArrayAdapter<String> adapter = new MyAdapter(getApplicationContext(),
R.layout.custom_row,R.id.custom_row_textview2,baseArray);
list1.setAdapter(adapter);
list1.setScrollingCacheEnabled(true);
}
@Override
public boolean onCreateOptionsMenu (Menu menu){
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.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();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void findView() {
btn1 = (Button) findViewById(R.id.button1);
list1 = (ListView) findViewById(R.id.listView1);
}
}
MyAdapter.java
public class MyAdapter extends ArrayAdapter {
public MyAdapter(Context context,int resource,int textViewResourceId,String[] objects){
super(context,resource,textViewResourceId, objects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
if (position % 2 == 0) {
view.setBackgroundColor(Color.rgb(100, 100, 100));
} else {
view.setBackgroundColor(Color.rgb(170,170,170));
}
return view;
}
}
custom_row.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/list_item">
<CheckBox
android:id="@+id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:focusable="false"
/>
<TextView
android:id="@+id/custom_row_textview1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="18sp"
android:text="gender"
android:padding="8dp"
android:textColor="#ff0acc"
/>
<TextView
android:id="@+id/custom_row_textview2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="20sp"
android:padding="10dp"
android:textColor="#ff0022"/>
<TextView
android:id="@+id/custom_row_textview3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:padding="10dp"
android:textColor="#2050ff"
android:textSize="15sp"
android:text="phoneNumber"/>
</LinearLayout>