質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

4回答

12018閲覧

Listviewの中身を初期化したい

rain_sun

総合スコア12

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2017/02/17 02:39

###前提・実現したいこと
Listviewの初期化

###発生している問題・エラーメッセージ
読み込み→戻る→読み込み
でListviewの中身が多重化してしまう

###該当のソースコード

java

1package 省略 2 3import 省略 4 5public class SqlLoad extends Activity 6implements View.OnClickListener{ 7 ListView lv; 8 static String[][] list; 9 static String[] Did = new String[2]; 10 static long id_; 11 static String[] Data; 12 static List<DataList> Dlist = new ArrayList<>(); 13 static int sortflg=1; 14 15 @Override 16 protected void onCreate(Bundle savedInstanceState) { 17 super.onCreate(savedInstanceState); 18 setContentView(R.layout.sql_load); 19 // final boolean[] flg = new boolean[1]; 20 Button sort = (Button) findViewById(R.id.sort); 21 sort.setOnClickListener(this); 22 23 24 Main(); 25 } 26 27 @Override 28 public void onClick(View v) { 29 switch (v.getId()) { 30 case sort: 31 // Dlist.sort(); 32 //Log.d("tt","a"); 33 Collections.sort(Dlist,new SortComparator()); 34 ListAdapter adapter = new ListAdapter(getApplicationContext(),Dlist); 35 if (sortflg < 2){ 36 sortflg++; 37 }else sortflg = 1; 38 // final Toast toast = Toast.makeText(this,"", Toast.LENGTH_SHORT); 39 lv.setAdapter(adapter); 40 break; 41 } 42 } 43 44 45 public void Main(){ 46 Data = SQLDataGet(); 47 // lv = new ListView(this); 48 // ArrayList<String> Data = new ArrayList<>(Arrays.asList(SQLDataGet())); 49 lv = (ListView)findViewById(R.id.sql_load_main); 50 51 for (String[] aList : list) { 52 DataList dataList = new DataList(); 53 dataList.setTitle(aList[0]); 54 dataList.setContent(aList[1]); 55 dataList.setDate(aList[2]); 56 Dlist.add(dataList); 57 } 58 // ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, data); 59 60 ListAdapter adapter = new ListAdapter(getApplicationContext(),Dlist); 61 lv.setAdapter(adapter);//リスト表示 62 // setContentView(lv,new ViewGroup.LayoutParams(WC,WC)); 63 64 lv.setOnItemClickListener(new AdapterView.OnItemClickListener(){ 65 @Override 66 public void onItemClick(AdapterView<?> parent,View view,int position,long id){ 67 // ListView listView = (ListView) parent; 68 // String item = (String)listView.getItemAtPosition(position); 69 Log.d("id",""+id); 70 id_ = id; 71 SQLDContentGet(); 72 SQLDataSet(); 73 finish(); 74 // Toast.makeText(getApplicationContext(),item + "clicked",Toast.LENGTH_LONG).show(); 75 } 76 }); 77 } 78 79 80 81 82 83 public String[] SQLDataGet(){ 84 MainActivity main = new MainActivity(); 85 Context con = this; 86 SQLiteDatabase sdb = main.SQLopen(con.getApplicationContext());//MainActivity参照 87 final String[] columns = new String[]{"title","content","date"};//列名 88 // String where = null;//条件 89 // String[] Args = new String[]{""};//?の置き換え 90 @SuppressLint("Recycle") Cursor c = sdb.query("MemoContents", columns, null, null, null, null, null); 91 int startPostion = c.getPosition(); 92 c.moveToFirst(); 93 // Log.d("DBG",""+c.getCount()); 94 list = new String[c.getCount()][columns.length]; 95 String[] Dlist = new String[c.getCount()]; 96 for (int i = 0; i< list.length; i++){ 97 for (int j = 0; j < list[1].length; j++){ 98 list[i][j] = c.getString(j); 99 Log.d(i+"-"+j,list[i][j]);//デバッグ 100 Dlist[i] = list[i][0]; 101 } 102 c.moveToNext(); 103 } 104 c.moveToPosition(startPostion); 105 106 // finish(); 107 return Dlist; 108 } 109 110 public void SQLDContentGet(){ 111 Did[0] = list[(int)id_][0]; 112 Did[1] = list[(int)id_][1]; 113 } 114 115 public void SQLDataSet(){ 116 Intent data = new Intent(); 117 Bundle bundle = new Bundle(); 118 data.putExtra("key.data",Did); 119 data.putExtras(bundle); 120 setResult(RESULT_OK,data); 121 finish(); 122 } 123 124 @Override 125 public void finish() { 126 super.finish(); 127 } 128} 129 130class ListAdapter extends ArrayAdapter<DataList>{ 131 private LayoutInflater inflater; 132 133 ListAdapter(Context context, List<DataList> objects){ 134 super(context,0,objects); 135 inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 136 } 137 138 @SuppressLint("InflateParams") 139 @NonNull 140 @Override 141 public View getView(final int position, View convertView, @NonNull ViewGroup parent){ 142 if (convertView == null) { 143 convertView = inflater.inflate(R.layout.custom_load_list, null); 144 } 145 final DataList list = this.getItem(position); 146 if (list != null){ 147 TextView title = (TextView) convertView.findViewById(R.id.textView1); 148 title.setText(list.getTitle()); 149 TextView content = (TextView) convertView.findViewById(R.id.textView2); 150 content.setText(list.getContent()); 151 TextView date = (TextView) convertView.findViewById(R.id.textView3); 152 date.setText(list.getDate()); 153 } 154 return convertView; 155 } 156} 157 158class SortComparator implements Comparator<DataList>{ 159 private int a=SqlLoad.sortflg; 160 private int b; 161 @Override 162 public int compare(DataList d1, DataList d2) { 163 switch (a){ 164 case 1: 165 b = Long.parseLong(d1.date) > Long.parseLong(d2.date) ? -1 : 1; 166 break; 167 case 2: 168 a=0; 169 b = Long.parseLong(d1.date) < Long.parseLong(d2.date) ? -1 : 1; 170 break; 171 } 172 Log.d("TestSort",""+a); 173 return b; 174 } 175} 176 177 178

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yona

2017/02/17 03:08

多重化とは具体的にどのような状態ですか?
rain_sun

2017/02/17 03:17

同じデータがListveiw内に複数配置されている状態です
guest

回答4

0

BA後ですが一応。

無駄な変数や処理が多すぎです。
処理を変えていくのはいいですが、
適当なタイミングで最適化していかないと
化け物みたいなコードが出来上がるだけですよ。

見た感じでは、
各メソッドの引数、戻り値を見直すことで、
クラス(インスタンス)変数は3つにまで減らすことが出来ると思います。

Java

1ListView lv; 2List<DataList> Dlist; 3static int sortflg;

また、List<DataList>の代わりにListAdapterを保持すれば、
ListView用の変数も必要なくなります。
なぜかは、ArrayAdapterの使い方を調べてください。

あと、今後もここなどで、他人にコードを見せるのであれば、
「java 命名規約」で少し調べてみることをお勧めします。

投稿2017/02/17 04:02

abs123

総合スコア1280

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rain_sun

2017/02/17 04:14

命名規約なんてものがあったのですか… ありがとうございます
abs123

2017/02/17 04:52

規約じゃなくて規則でしたね。 まぁ、検索には引っかかってくれると思いますが。 全てのコードが一定の規則に従って記述されている、というのは、 読む側にとって、読みやすい、とてもありがたいことです。 早めに癖をつけておきましょう。
guest

0

安易にstaticを使ってはいけません、staticにしている意味はなんでしょうか?
特に理由が無いならフィールド変数のstaticを外すといいですよ。

投稿2017/02/17 03:34

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rain_sun

2017/02/17 03:44

同.java内の他のクラスに渡す為だと思います 修正しておきました
guest

0

ベストアンサー

java

1// 表示するリスト要素をクリアする 2Dlist.clear(); 3 4for (String[] aList : list) { 5 DataList dataList = new DataList(); 6 dataList.setTitle(aList[0]); 7 dataList.setContent(aList[1]); 8 dataList.setDate(aList[2]); 9 Dlist.add(dataList); 10}
  1. clear()追加
  2. for文実行後のDlistの中身をデバックしてみてください。

投稿2017/02/17 03:23

liguofeng29

総合スコア801

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

初期化すりゃいいんじゃないの?

java

1Dlist = new ArrayList<>(); //初期化 2for (String[] aList : list) { 3 : 4 Dlist.add(dataList); 5}

投稿2017/02/17 02:43

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rain_sun

2017/02/17 03:04

試したのですが Dlistを初期化するとListviewの中身が空になってしまいます
fuzzball

2017/02/17 03:51 編集

下でaddしてるから空にならないんじゃ?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問