2016-11-07 17 views
-1

同じアクティビティレイアウトでは、TextViewフィールドとListViewの各項目にボタンがあります。私のリストビュー配列アダプタでは、私は "動的に"上記の私のTextViewフィールドの値を更新しようとしているgetView()メソッド内のボタンクリックリスナーを持っています。ListViewボタンからTextViewフィールドを動的に更新するにはどうすればよいですか?

これまでのところ、膨大なインスタンスの助けを借りてTextViewの値を更新できましたが、メインメニューからアクティビティページに戻ってページを更新すると、更新されたTextViewしか見ることができません。

最後の解決策として、手動で行うことなく、getView()メソッド内のブーンリスナー内のアクティビティページを再起動するように設定しました。これは、ListViewアイテムボタンをクリックするたびにページが再読み込みされるのをユーザーが見ている最善の方法ではありません。

値を動的に更新する方法を教えてください。続き

は私のアダプタクラスのコードです:あなたは大文字で始まるクラス名を書いた場合、すべての

public adapter(Context context, int resource, ArrayList<value> objects) 
{ 
    super(context, resource, objects); 
    layout = resource; 
    array = objects; 
} 

@Override 
public View getView(final int position, View convertView, final ViewGroup parent) 
{ 
    box = null; 
    db = new database(getContext()); 

    if (convertView == null) 
    { 
     LayoutInflater inflater = LayoutInflater.from(getContext()); 
     convertView = inflater.inflate(layout, null); 

     box = new holder(); 
     box.X = (TextView) convertView.findViewById(R.id.valueName); 
     box.Y = (TextView) convertView.findViewById(R.id.valueNumber); 
     box.button = (Button) convertView.findViewById(R.id.itemDeleteButton); 
     box.button.setTag(position); 
     convertView.setTag(box); 
    } 

    else 
    { 
     box = (holder) convertView.getTag(); 
    } 

    box.X.setText(getItem(position).getX()); 
    box.Y.setText(String.valueOf(getItem(position).getY())); 

    box.button.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      View view = View.inflate(getContext(), R.layout.activity_plan, null); 

      list = (ListView) view.findViewById(R.id.listView); 
      month = (Spinner) view.findViewById(R.id.inputSpinner); 
      remainder = (TextView) view.findViewById(R.id.outputRemainder); 

      adapt = new adapter(getContext(), R.layout.activity_item, array); 
      array.remove(position); 

      month_is = month.getSelectedItem().toString(); 
      db.removePlanData(month_is, position + 1); 
      notifyDataSetChanged(); 

      cursor = db.getHelpDataRows(month_is); 
      cursor.moveToFirst(); 
      val_is = Integer.parseInt(cursor.getString(cursor.getColumnIndex("value"))); 

      remainder_is = val_is - db.getCurrent(month_is); 
      remainder.setText(String.valueOf(remainder_is)); 

      // RESTARTING ACTIVITY TO SEE THE UPDATED TEXTVIEW VALUE OUTSIDE LISTVIEW. 
      Intent intent= new Intent(getContext(), plan.class); 
      getContext().startActivity(intent); 
     } 
    }); 

    return convertView; 
} 


public class holder 
{ 
    TextView X; 
    TextView Y; 
    Button button; 
} 
+1

あなたのコード –

+0

を表示することができればそれは便利だろうが、あなたのコードを示しています。 – Chisko

+0

あなたの返信をありがとう。私は以下のコードを投稿しました。返事が遅れて申し訳ありません。私はあなたの助けに感謝します! – Ras

答えて

0

まず、それが良いだろう。次に、私があなたの状況を理解しているように:listViewのアイテムのボタンをクリックすると、listViewの外でtextViewのテキストを変更できるはずです。アクティビティにtextViewpublic staticを作成することで、他のクラスからアクセスできるようにすることができます。例の場合:

MainActivity.textView.setText("something"); 
あなたの主な活動で

のTextView public staticを行います

public static TextView textView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.viloyatlat_frame); 

    textView = (TextView)findViewById(R.id.textView); 

} 
+0

ありがとう、Abduaziz。あなたの言ってる事がわかります。次はそれを試してみましょう。 – Ras

+0

助けてくれたら、私の答えを受け入れてください。ハッピーコーディング、Ras! –

+0

それはトリックでした。ありがとう! – Ras

関連する問題