ここに、Androidアプリケーション用のMy GridViewの実装があります。 プログラムのために初めてそれはうまく動作します。しかし、いくつかのスクロールアップとダウンをした後 私の問題は、グリッドビューで私はいくつかの時間を予期しない位置に間違ったtextviewを入れてスクロールします。Unrood GridViewで期待されるデータセットの動作モバイル時に着陸するポートまたは着陸するポートに変更する
GridViewアダプタのソースコードは以下のとおりです。ここで
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mGridView=(GridView)findViewById(R.id.gridview_id);
InitializeVariable();
mGridView.setAdapter(new GridAdapter(GridViewExampleActivity.this));
mGridAdapter=new GridAdapter(GridViewExampleActivity.this);
// mGridView.setEnabled(false);
mGridView.setOnLongClickListener(this);
mGridView.setOnItemClickListener(this);
}
public class GridAdapter extends BaseAdapter{
public Context mContext_GridAdapter=getApplicationContext();
GridAdapter(Context context){
this.mContext_GridAdapter=context;
}
@Override
public int getCount() {
return Fix_Grid_View;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
RelativeLayout mRelative_Box_Grid;
TextView mTextView;
View v;
if(convertView==null){
mLayoutInflater=LayoutInflater.from(GridViewExampleActivity.this);
v=mLayoutInflater.inflate(R.layout.relative_box_view, null);
mTextView=(TextView)v.findViewById(R.id.txt_number);
mRelative_Box_Grid=(RelativeLayout)v.findViewById(R.id.relative_view);
mRelative_Box_Grid.setLayoutParams(new GridView.LayoutParams(GridView.AUTO_FIT,Device_Height));
mRelative_Box_Grid.setPadding(2, 2, 2, 2);
mTextView.setTextSize(Fix_Text_Size);
mTextView.setText(String.valueOf(position));
mTextView.setId(position);
}else{
v=convertView;
}
return v;
}
}
私は風景モード用のres /レイアウト-土地で同じmain.xmlファイルを入れて、私のメインのxmlファイル
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<GridView android:numColumns="3"
android:stretchMode="columnWidth"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:id="@+id/gridview_id"
android:longClickable="true"
></GridView>
</LinearLayout>
です。
と私はまた、オリエンテーション
android:configChanges="orientation"
にハンドルの変更のための私のAndroidManifestファイルに次の行を追加し、私たちがここで目に見えないために行って、そのためのコードであるTextViewのその位置に任意の項目をクリックしたときに私も実装しています。
@Override
public void onItemClick(AdapterView<?> AdapterView, View view, int position, long arg3) {
int Child_Count;
RelativeLayout mRelativeLayout;
TextView mTextView;
try{
Toast.makeText(GridViewExampleActivity.this, "Position "+ position, 600).show();
Child_Count=AdapterView.getChildCount();
mRelativeLayout=(RelativeLayout) AdapterView.getChildAt(position);
mTextView=(TextView) mRelativeLayout.getChildAt(0);
mTextView.setVisibility(View.INVISIBLE);
// mGridAdapter.notifyDataSetChanged();
// mGridView.setAdapter(mGridAdapter);
Log.v(TAG, "Child Count is"+ Child_Count);
}catch(Exception e){
Log.v("log", " Mes"+TAG +e.getMessage());
}
}
この機能の作業もなく、Ctrlキー+ F11キーを使用して、私のエミュレータでは、いくつかの向きの変更を行った後、いくつかの時間のために失敗します。 ここに私のInflater View XMLファイルがあります。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:background="@drawable/rectangle_white"
android:id="@+id/relative_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView android:text="@string/hello"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:id="@+id/txt_number"/>
</RelativeLayout>
ここでは、問題iのデモアプリケーションのリファレンスイメージを取得します。
最初のイメージを見、私が上にスクロールし、TextViewのインターチェンジの値ダウン予期しない
と11からアンドロイド携帯もいくつかの時間開始の景観ビューで同じ変更することをそのようなやり方で起こるべきではない。一見
"convertView == nullのときはビューをインスタンス化するだけです - 正確に彼がやっていることではありません(if(convertView == null))?ここで重要なのは、mTextView.setText(String.valueOf(position))を移動することです。 return文のすぐ上になるようにします。 –
まさに!私はインスタンス化と初期化を意味しました。彼のテキストビューのテキストが設定されていないことを示すために、コメント付きのコードを追加しました。そして、それを修正する方法 – Entreco
@Entreco私はあなたがそれが失敗し、ランタイムエラーを与えることを記述したとして移動しようとします – Herry