如何从ListView按钮动态更新TextView字段?

时间:2016-11-07 10:15:02

标签: android

在相同的活动布局上,我有一个TextView字段和一个ListView,每个项目都有一个按钮。在我的ListView数组适配器中,我在getView()方法中有一个按钮单击侦听器,我试图“动态”更新上面提到的TextView字段的值。

到目前为止,我已经能够在膨胀的实例的帮助下更新TextView值,但是当我通过从主菜单重新访问活动页面来刷新页面时,我只能看到更新的TextView。

作为最后一个解决方案,我已将其设置为在getView()方法内的buton侦听器内重新启动活动页面,而无需手动执行。这不是最好的方法,因为用户每次点击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 :(得分:0)

首先,如果你写一个以大写字母开头的类名会更好。接下来,根据我的理解,您的情况是:当您单击listView项目上的按钮时,您应该能够在listView之外更改textView的文本。可以通过在您的活动中设置textView public 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);

}